Express源碼分析1

通過require('express')會expose一個函數,暫時現成它爲express,儘量保持和require裏面的參數名一樣或者相式。
接着通過app = express(),我們可以實例化一個對象,它其實類似http.Server的實例化server對象

下面代碼,可以分析,app可以作爲一個createServer方法的回調函數,或者request監聽事件的回調函數

//express源碼
var app = function(req, res, next) {
    app.handle(req, res, next);
};

因此,在進行服務器創建時,我們可以:

let http = require('http');
let express = require('express');
let app = express();

http.createServer(app).listen(3000);

另外一種方法:

通過分析application.js文件,可以瞭解在app對象上有一個listen方法,實現監聽事件,本質還是通過http模塊,先通過
createServer創建一個server對象(http.Server),app(this指向當前express())作爲回調函數,通過server.listen.apply(server, arguments)傳入
app.listen的參數傳入server.listen中。本質上還是利用http的createServer方法。

//監聽事件源碼

app.listen = function listen() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

因此,另外一種創建服務器方法:

let express = require('express');
let app = express();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章