在Express中间件的调用链中,app.param方法总是在app.use之前被调用吗?
我用这个程序测试了在express 4.10.2中更改app.use
和app.param
顺序的情况。参数总是先运行,这是有道理的,因为路由处理程序希望能够进行req.params.foo
操作,为了使其工作,参数处理程序需要先运行。
var express = require('express');
var app = express();
app.use("/:file", function (req, res) {
console.log("@bug route", req.params.file);
res.send();
});
app.param("file", function (req, res, next, val) {
console.log("@bug param", val);
next();
});
app.listen(3003);
运行此命令并使用 curl localhost:3003/foo
进行测试,您将得到以下输出:
@bug param foo
@bug route foo
您可以通过日志记录来测试它,但我相当确定在4.0中,当您设置应用程序时,所有内容都按照声明的顺序调用。
console.log
中添加时间戳(Date.now()
或process.hrtime()
)在按时间排序时会产生相同的结果。 - zamnuts