我能說很後悔四點鐘爬起來寫了個(一)config麼。。。
在ghost blog的node server啟動後,首先做好config工作,接下來就是blog系統本身的初始化,在很多初始化步驟中,以筆者現在龜爬的閱讀進度來看,還不能理解為什麼,只能寫是什麼。
在入口server.js中,首先呼叫了ghost.init()方法,呼叫**只有一行就省略不貼了。而這個ghost物件,就是整個系統的核心物件,從名字上就能看出來。他是從乙個ghost類上new出來的。而我們今天要講的init就是ghost類中的初始化方法。
ghost在./core目錄下,init函式如下:
那麼按著順序乙個乙個步驟簡單介紹一下吧。
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() : 允許動作的初始化,筆者返回了這樣的資訊,但是用處不明。
先寫這麼多,每個步驟其實都可以深入下去,下次寫啥呢……
二 LinkedList原始碼分析
二 linkedlist原始碼分析 上篇看了下arraylist原始碼,這篇記錄下linkedlist原始碼分析 linkedlist 繼承 abstractsequentiallist 提供了對元素順序訪問的抽象 linkedlist 實現 deque介面,底層構成雙向鍊錶結構 linkedlis...
Spring原始碼分析(二)
針對spring中bean初始化時擴充套件類執行順序進行分析 通過getbean逐層最終到bean例項化前後呼叫的方法,主要是aware介面 beanpostprocessor initializingbean init method的呼叫順序 abstractbeanfactory dogetbe...
Jquery原始碼分析 二)
prk 2008 08 12 型別 說明 dom element 第乙個引數為dom元素,第二個引數不用。直接把dom元素存在新生成的jquery物件的集合中。返回這個jquery物件。構建jquery物件完成。string 第乙個引數為string有三種情況 1 html的標籤字串,html ar...