当使用express时,代码会这样写:
var express = require(‘express‘);
如果创建一个express的应用,代码会这样写:
var app = express();
那么express()是什么? 源码:
//express()会执行createApplication()。
exports = module.exports = createApplication;
/**
* Create an express application.
*
* @return {Function}
* @api public
*/
function createApplication() {
var app = function(req, res, next) {
app.handle(req, res, next);
};
mixin(app, EventEmitter.prototype, false);
mixin(app, proto, false);
app.request = { __proto__: req, app: app };
app.response = { __proto__: res, app: app };
app.init();
return app;
}
执行的结果就是app是一个实例,它有私有成员对象:request和response,同时继承Event模块中的EventEmitter的原型。
也继承了proto中的方法。执行app.init();源码:
app.init = function init() {
//给app类/对象赋值三个公用成员
this.cache = {};
this.engines = {};
this.settings = {};
// 初始化配置
this.defaultConfiguration();
};
在研究defaultConfiguration之前,抽象下app.set函数,它就是给setting赋值的函数,同时针对key = "etag" 和 query parser以及"trust proxy"进行特殊的的设置。
理解了set函数,defaultConfiguration主要设置默认的参数,和注册mount事件。
原文:http://www.cnblogs.com/liuyinlei/p/6264677.html