看下這個函式的的核心**就是:
//get file extension,ext為副檔名
var extension = ext[0] !== '.'
? '.' +ext
: ext;
//store engine
this.engines[extension] = fn;
//use的使用var express = require('express');
function
handlerwrap()
this
.lazyrouter();
lazyrouter() );
為path建立layer,有多少個fn,就建立多少個layer,然後把這個layer壓入router.stack陣列中。
this._router.use(query(this.get('query parser fn')));
'query parser fn')為乙個函式:
this._router.use(middleware.init(this
)); }
};
if (!fn || !fn.handle || !fn.set)fn.mountpath = path; //
如果是express的物件,那麼給express這個物件成員mountpath賦值為path(可能含有正則);
fn.parent = this; //
fn變成子express物件,當前的express為父。
function
這裡看的不太懂。
fn.handle(req, res, function
(err) );
});//
console.log("fn="+json.stringify(fn));
fn.emit('mount', this);
//進入router/index.js中,執行proto.use()方法。
//實際上是給router.stack新增乙個layer成員,
var layer = new
layer(path, , fn);
layer.route = undefined; //
給layer.route賦值undefined
this.stack.push(layer);
同理:this._router.use(middleware.init(this))的作用是把該函式,構造成乙個layer成員,然後是給router.stack新增乙個layer成員。
返回的是下列函式:return
function
expressinit(req, res, next);
express原始碼剖析2
使用express時,會這樣寫 var express require express 建立乙個express的應用,express.js return api public function req,res,next false false return 在express.js中,要區分下面兩個包...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...
express原始碼學習
express.js相當於過程式語言的main函式,是乙個入口,吐出express這個工廠函式。從 組織來看,我們會發現乙個有趣的現象。引入語句總是位於上方,主程式夾在中間,主程式用到的一些輔助函式放在後面。在node.js,我們會頻繁看到es5的一些新方法,這也node.js的特色之一。var c...