最近看了NodeJS的Connect框架的代碼,查看文檔得知Coonect的使用方法如下:// 由API文檔明顯知道,可以這樣調用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函數的實現如下:function createServer() {
function app(req, res){ app.handle(req, res); }
utils.merge(app, proto); app.stack = []; return app;
};繼續跟蹤其proto.js的實現代碼,只有app.use和app.handle兩個函數,并沒有發現在哪里調用了...但可以很肯定connect.createServer()返回的是NodeJS核心的http lib里面的http.Server的實例。我目前的水平就只能到這里了:)由于暫時沒有安裝NodeJS的環境[ 不好意思,偶在網吧:)( ],所以請有NodeJS環境的童鞋麻煩Debug一下,能夠分析一下Connect的調用過程,特別是createServer運行的過程,以及實現好的“中間件”是如何進入到connect的中間件的“大循環”里面的。萬分感謝!求NodeJS大俠出來拯救我??!謝謝!
2 回答

慕絲7291255
TA貢獻1859條經驗 獲得超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條經驗 獲得超9個贊
首先回答你一下 為什么createServer()沒有參數而他的api調用仍然使用了參數...
這是一個js的基礎知識..函數的參數是在函數執行前執行的..他這個寫法的意思是在connect.createServer()執行前 先執行下connect.logger()
、connect.static(__dirname + '/public')
之類的。雖說有點裝逼但是很簡潔..
建議寫成
connect.createServer() .use(connect.favicon()) .use(connect.logger()) .use(connect.static(__dirname + '/public')) .listen(3000);
你就更好理解了...
- 2 回答
- 0 關注
- 257 瀏覽
添加回答
舉報
0/150
提交
取消