使用express時,**會這樣寫:
var express = require('express');
建立乙個express的應用,**:
//express.js/**
* * @return
* @api public */
function
(req, res, next) ;
false
);false
);
return
//}
在express.js中,要區分下面兩個包:
var route = require('./router/route');var router = require('./router');
//對外都暴露route和router,他們兩者有些不同,
//router是route的超集,兩者的聯絡只在router.route用到。呼叫router.route會得到乙個route,不過給router.stack新增了乙個layer,
//該layer通過router的引數和route.dispatch和使用者的path來定義的。
//route只有三個成員,stack陣列(儲存layer物件),path(路由的路徑)和method物件。
//其中stack陣列與router一樣,同時兩個物件的原型都有methods的和all的方法
exports.route =route;
exports.router = router;
init() ;
this.engines ={};
this.settings ={};
//this
.defaultconfiguration();
};
//use的使用
var express = require('express');
function
handlerwrap()
路徑/會呼叫hanlerwrap方法
this.lazyrouter();
lazyrouter() );
為path建立layer,有多少個fn,就建立多少個layer,然後把這個layer壓入router.stack陣列中。初始定義了兩個layer
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);
express原始碼剖析3
看下這個函式的的核心 就是 get file extension,ext為副檔名 var extension ext 0 ext ext store engine this.engines extension fn use的使用 var express require express functio...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...
express原始碼學習
express.js相當於過程式語言的main函式,是乙個入口,吐出express這個工廠函式。從 組織來看,我們會發現乙個有趣的現象。引入語句總是位於上方,主程式夾在中間,主程式用到的一些輔助函式放在後面。在node.js,我們會頻繁看到es5的一些新方法,這也node.js的特色之一。var c...