快速访问req.params的中间件

Rob*_*son 21 node.js express

我想隔离一段代码来检查每个请求req.params或者req.body每个请求所需的值.我发现的是,如果我在此之前尝试访问这些值,app.use(app.router)则尚未解析请求以包含这些对象.如果我尝试插入中间件, app.use(app.router)那么它会一起跳过.

我可以在一个地方处理这些值,以便下游路径和模型可以使用这些工作吗?

mik*_*mes 15

只需对每条路线内联运行中间件,

const middleware = (req, res, next) => {
    console.log(req.params.id);
    next();
};

app.get('/test/:id', middleware, (req, res) => {
    res.send('hi');
});
Run Code Online (Sandbox Code Playgroud)


Cth*_*ood 11

你无法做你想做的事. https://github.com/strongloop/express/issues/2088非常清楚地解释了这一点.

我一直试图做你想做的事情一段时间,没有成功.我终于在github中找到了这个问题.

  • 这是设计使然!仅在中间件执行后才匹配路径/路由。如果您愿意,请使用@mike-james 建议的技术。 (2认同)

sgr*_*454 -1

您可以简单地添加一个通配符路由,该路由始终在其他路由之前运行,然后检查其中的参数,而不是尝试通过自定义中间件来执行此操作:

app.get('/*', function(req, res, next) {

   if (req.param('foo')) {
      // Do something
      return next(); // or return res.send(403, 'no way!'), or whatever.
   } 

   return next();

});
Run Code Online (Sandbox Code Playgroud)