最近看了NodeJS的Connect框架的代碼,查看文檔得知Coonect的使用方法如下:// 由API文檔明顯知道,可以這樣調(diào)用createServer
// HTTP
var server = connect.createServer(
connect.logger()
, connect.static(__dirname + '/public')
); // HTTPS
var server = connect.createServer(
{ key: key, cert: cert }
, connect.logger()
, connect.static(__dirname + '/public')
); // 或者直接:
connect(
connect.logger()
, connect.static(__dirname + '/public')
).listen(3000);翻看Connect的源代碼得知connect.createServer函數(shù)的實現(xiàn)如下:function createServer() {
function app(req, res){ app.handle(req, res); }
utils.merge(app, proto); app.stack = []; return app;
};繼續(xù)跟蹤其proto.js的實現(xiàn)代碼,只有app.use和app.handle兩個函數(shù),并沒有發(fā)現(xiàn)在哪里調(diào)用了...但可以很肯定connect.createServer()返回的是NodeJS核心的http lib里面的http.Server的實例。我目前的水平就只能到這里了:)由于暫時沒有安裝NodeJS的環(huán)境[ 不好意思,偶在網(wǎng)吧:)( ],所以請有NodeJS環(huán)境的童鞋麻煩Debug一下,能夠分析一下Connect的調(diào)用過程,特別是createServer運行的過程,以及實現(xiàn)好的“中間件”是如何進入到connect的中間件的“大循環(huán)”里面的。萬分感謝!求NodeJS大俠出來拯救我??!謝謝!
2 回答

慕絲7291255
TA貢獻1859條經(jīng)驗 獲得超6個贊
function createServer() { if ('object' == typeof arguments[0]) { return new HTTPSServer(arguments[0], ` `Array.prototype.slice.call(arguments, 1) ); } else { return new HTTPServer( Array.prototype.slice.call(arguments) ); } };

PIPIONE
TA貢獻1829條經(jīng)驗 獲得超9個贊
首先回答你一下 為什么createServer()沒有參數(shù)而他的api調(diào)用仍然使用了參數(shù)...
這是一個js的基礎(chǔ)知識..函數(shù)的參數(shù)是在函數(shù)執(zhí)行前執(zhí)行的..他這個寫法的意思是在connect.createServer()執(zhí)行前 先執(zhí)行下connect.logger()
、connect.static(__dirname + '/public')
之類的。雖說有點裝逼但是很簡潔..
建議寫成
connect.createServer() .use(connect.favicon()) .use(connect.logger()) .use(connect.static(__dirname + '/public')) .listen(3000);
你就更好理解了...
- 2 回答
- 0 關(guān)注
- 254 瀏覽
添加回答
舉報
0/150
提交
取消