我想看看express.Router.get
的实施情况。
我从项目的index.js
开始,查看了git上的快速源代码。
索引有module.exports = require('./lib/express')
。该文件有var Router = require('./router')
。该位置是一个目录,因此我检查了该目录中的index.js
文件。果然它有:
var proto = module.exports = function(options) {
var opts = options || {};
function router(req, res, next) {
router.handle(req, res, next);
}
// mixin Router class functions
setPrototypeOf(router, proto)
router.params = {};
router._params = [];
router.caseSensitive = opts.caseSensitive;
router.mergeParams = opts.mergeParams;
router.strict = opts.strict;
router.stack = [];
return router;
};
返回路由器功能的代码。但是,任何地方都没有定义.get
函数。实际的功能定义在哪里?
注意:我询问您将使用的get
功能:
router.get('/', ...)
。
答案 0 :(得分:1)
浏览Express v4.15.2我在express/lib/application.js
(第468行)
/**
* Delegate `.VERB(...)` calls to `router.VERB(...)`.
*/
methods.forEach(function(method){
app[method] = function(path){
if (method === 'get' && arguments.length === 1) {
// app.get(setting)
return this.set(path);
}
this.lazyrouter();
var route = this._router.route(path);
route[method].apply(route, slice.call(arguments, 1));
return this;
};
});
其中this._router
来自express/lib/router/index.js
根据您所寻找的内容,您可以:
express/lib/router/layer.js::match (line 110)
检查此路线是否与path
匹配,如果填充.params
express/lib/router/route.js::dispatch (line 98)
将req, res
发送到该路由