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();


版权声明:本文为wangyuegyq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。