Node.js Express 中间件:app.param vs app.use

Ale*_*lls 4 node.js express

在 Express 中间件内部的调用链中,app.param 方法是否总是在 app.use 之前被调用?

Pet*_*ons 5

我用这个程序进行了测试,用 express 4.10.2改变了app.usevs的顺序app.param。param 总是首先运行,这是有道理的,因为路由处理程序希望能够做到,req.params.foo并且为了使其工作,需要运行 param 处理程序。

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);
Run Code Online (Sandbox Code Playgroud)

运行它并测试,curl localhost:3003/foo你会得到输出:

@bug param foo
@bug route foo
Run Code Online (Sandbox Code Playgroud)

  • 控制台日志是异步的,所以为了完整起见,将时间戳(`Date.now()` 或 `process.hrtime()`)添加到 `console.log` 会在按时间排序时产生相同的结果。 (2认同)