`
white_crucifix
  • 浏览: 96726 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Ghost blog 源码分析(二)Init

阅读更多
我能说很后悔四点钟爬起来写了个(一)config么。。。

    在Ghost blog的Node server启动后,首先做好config工作,接下来就是blog系统本身的初始化,在很多初始化步骤中,以笔者现在龟爬的阅读进度来看,还不能理解为什么,只能写是什么。

    在入口server.js中,首先调用了ghost.init()方法,调用代码只有一行就省略不贴了。而这个ghost对象,就是整个系统的核心对象,从名字上就能看出来。他是从一个Ghost类上new出来的。而我们今天要讲的init就是Ghost类中的初始化方法。

   ghost在./core目录下,init函数如下:
// Initialise the application
Ghost.prototype.init = function () {
    var self = this;

    function doFirstRun() {
      //...... 省略
    }

    function initDbHashAndFirstRun() {
      //.......省略
       
    }

    // ### Initialisation
    return when.join(
        // Initialise the models
        self.dataProvider.init(),
        // Calculate paths
        self.getPaths(),
        // Initialise mail after first run
        self.mail.init(self)
    ).then(function () {
        // Populate any missing default settings
        return models.Settings.populateDefaults();
    }).then(function () {
        // Initialize the settings cache
        return self.updateSettingsCache();
    }).then(function () {
        return when.join(
            // Check for or initialise a dbHash.
            initDbHashAndFirstRun(),
            // Initialize plugins
            self.initPlugins(),
            // Initialize the permissions actions and objects
            permissions.init()
        );
    }).otherwise(errors.logAndThrowError);
};


那么按着顺序一个一个步骤简单介绍一下吧。
1. self.dataProvider.init() : 调用了一个类自身属性dataProvider的init方法,这个dataProvider在上文有定义
models      = require('./server/models'),

dataProvider: models,

但其实models是个目录,下面是诸如user,post,tag,setting等模块。那么话说回来,models.init()到底做了什么,它就做了一件事:比较当前的blog数据版本和默认的数据版本是否一致,如果不一致会做更新,甚至是直接抛错。

2. self.getPaths() :调用类自身的方法getPaths(),所做的工作就是生成主题(themes)和插件(plugins)所在的路径,以供之后其他方法调用。

3. self.mail.init(self) : 很明显,这是在初始化邮件模块

4. models.Settings.populateDefaults() : setting里面其实存有blog的很多基本信息,诸如:
databaseVersion
title
description
email
logo
cover
defaultLang
postsPerPage
forceI18n
activeTheme
activePlugins
installedPlugins

而,这一步代码,所做的工作就是去看看当前blog中的这些key有没有缺少的,如果少了,就用defaults的value给补上

5. self.updateSettingsCache() : 将当前的基本信息给更新到cache里,就是第4步里那些信息,这个方法其实还有一个参数settings,如果传了就用所传的,不传的话就从db里去找数据。

6. initDbHashAndFirstRun() :初始化dbHash哈希值,dbHash也是在settings里的一项数据,这里做个判断,如果已存在就用现成的,不存在就用uuid.v4()重新生成,dbhash的作用从注释上看是用于cookie相关的操作,实际用处暂时不知道。
        // Holds the dbhash (mainly used for cookie secret)
        instance.dbHash = undefined;

同时,生成好dbHash后,就进行First run,在console上输出一些信息,上面代码里就省略了。

7. self.initPlugins() : 对插件进行加载,不过一开始当然是没有插件的

8. permissions.init() : 允许动作的初始化,笔者返回了{ edit: [ 'post' ], remove: [ 'post' ], create: [ 'post' ] }这样的信息,但是用处不明。

先写这么多,每个步骤其实都可以深入下去,下次写啥呢……
0
0
分享到:
评论
2 楼 white_crucifix 2014-06-06  
a15819620038 写道
楼主写得挺好的呀,为什么不继续更新呢?我最近需要研究ghost源码,希望有个人能带带路,好上手哇~


工作忙了一阵子。。。。然后就三分钟热度了。。。
1 楼 a15819620038 2014-06-06  
楼主写得挺好的呀,为什么不继续更新呢?我最近需要研究ghost源码,希望有个人能带带路,好上手哇~

相关推荐

    ghost 3.6 源码 VC6.0+SDK

    Ghost 3.6版本的源码公开,为开发者提供了一个深入理解其工作原理、进行二次开发或定制化改造的宝贵资源。本文将围绕Ghost 3.6源码、Visual C++ 6.0(简称VC6.0)开发环境以及SDK的使用进行详尽解析。 首先,我们...

    ghost远控源码详讲2

    【标题】:Ghost远控源码详讲2 在IT领域,远程控制软件是一种非常重要的工具,它允许用户在一个设备上操作另一个设备,仿佛亲临其境。Ghost远控是其中的经典代表,深受程序员和安全研究人员的喜爱。对于那些希望...

    功能完善的Ghost3.6源码

    Ghost3.6源码是基于开源项目Ghost的一款高级版本,Ghost是一个流行的开源博客平台,以其简洁的Markdown编辑器和响应式设计而闻名。这个3.6版本进一步增强了其功能性和稳定性,为用户提供了更加完善的博客发布和管理...

    Ghost远控源码免杀详讲

    Ghost远控软件,作为一款知名的RCS,其源码分析与免杀技术是黑客与安全研究人员关注的焦点。免杀技术,即防止反病毒软件检测到恶意软件的技术,对于理解网络犯罪的手段和防御策略具有重要意义。 1. Ghost远控软件...

    ghOst3.6源码修改后过大多数杀软

    ghOst3.6源码修改后过大多数杀软ghOst3.6源码修改后过大多数杀软ghOst3.6源码修改后过大多数杀软ghOst3.6源码修改后过大多数杀软ghOst3.6源码修改后过大多数杀软

    Ball版GHOST3.6源码

    通过分析源码,我们可以了解到软件的工作原理、功能实现以及可能的优化空间。 【标签】:“Ball版GHOST3.6源码”标签明确了这个话题的核心内容,即关于特定开发者Ball对GHOST3.6的源代码修改。 【压缩包子文件的...

    c语言ghost远控源码

    【标题】"C语言Ghost远控源码"指的是一个基于C语言编写的远程控制软件——Ghost的源代码。Ghost在IT行业中通常被视为一种高级的、隐蔽的远程访问工具,允许用户远程控制其他计算机,进行各种操作,如文件管理、监控...

    ghost3.75源码

    "Ghost 3.75源码"是一个针对老版本Ghost软件的开源代码集合,这个版本在IT领域中具有一定的历史意义。Ghost,全称为“Ghost for Windows”,最初由Symantec公司开发,是一款广泛用于系统备份与恢复的工具。Ghost ...

    ghost3.6源码

    Ghost 3.6源码的分析首先可以从其架构入手。这个版本采用了模块化设计,每个模块负责不同的功能,如用户管理、游戏状态跟踪、聊天系统等。这种设计使得代码结构清晰,便于维护和扩展。源码中的核心部分包括网络通信...

    牛精 ghost远控源码

    【标题】"牛精 ghost远控源码"指的是一个基于Ghost技术的远程控制软件的源代码,该软件可能被命名为“牛精Ghost”。Ghost在IT领域通常是指一种克隆或备份系统的工具,但在这种上下文中,它可能是指一种用于远程监控...

    GHOST3.75源码

    《GHOST3.75源码解析:深入理解与应用》 GHOST3.75,作为一款历史悠久的系统克隆与恢复工具,其源码的公开无疑为开发者和技术爱好者提供了一个宝贵的参考资料。通过深入研究GHOST3.75的源码,我们可以洞察其工作...

    ghost2012远控源码

    【标题】"ghost2012远控源码"指的是Ghost 2012远程控制软件的源代码,这是在编程领域中一个重要的研究对象,尤其是对于那些对网络安全、恶意软件分析以及逆向工程感兴趣的开发者和安全专家。Ghost 通常指的是能够...

    ghost源码欢迎下载

    ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控ghost远控...

    ghost干净源码

    而"GH0ST3.75源码"则表明包含了GHOST的3.75版本的源代码,这为分析其工作原理、逆向工程以及可能的安全漏洞提供了宝贵资料。 对于研究者或安全专家来说,分析这样的源码可以帮助理解恶意软件的工作方式,提升防御...

    GHOST源码,很好的源码

    【GHOST源码详解】 GHOST,全称可能为“Generic Hosted Service Toolkit”,是一种广泛应用于系统监控、远程控制和软件部署的技术框架。这个源码因其高效和实用性而备受推崇,尤其适合那些需要进行实时监控、自动...

    饭客VIP远控GHOST编译源码.rar

    1. **代码结构**:分析源码的组织方式,理解模块化设计,学习如何划分功能组件。 2. **算法和数据结构**:查看源码中的关键算法,学习如何高效地处理数据和执行任务。 3. **错误处理**:研究源码如何处理异常情况...

    ghost原装正版远控源码(毫无修改)

    ghost原装正版远控 毫无作假 远程控制源代码 打造个人版本远程控制软件

    GHOST 3.6 源码教程

    GHOST 3.6 源码教程 我觉得挺好的 啊 GHOST 3.6 源码教程

    ghost源码免杀-2

    《Ghost源码免杀技术详解》 在网络安全领域,Ghost是一种常见的恶意软件,其源码免杀技术是黑客和安全研究人员关注的重点。本教程将深入探讨Ghost源码免杀的全套流程,帮助读者理解免杀技术的核心原理,并提供实用...

Global site tag (gtag.js) - Google Analytics