将req.params传递给next()404处理程序

时间:2014-09-17 11:50:01

标签: node.js express

我正在使用Node和Express 4.我在路线中有这个代码:

db.clients.findById(req.params.id, function(err, client) {
    if (err) return next(err);
    if (!client) return next();
    res.json(client);
});

在我的所有路线之后,我有这个404处理程序。

/// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

因此,当找不到客户端时,将调用next(),这是404处理程序。这很好用,但所有404条消息都是“未找到”。我想要更详细的消息,例如“找不到req.params.id”。但似乎req.params没有传递给404处理程序。

Q1:使用next()时,为什么不传递整个请求?我以为应该这样做。

Q2:有没有办法将req.params传递给404处理程序?

1 个答案:

答案 0 :(得分:1)

您的问题的答案是:

  1. 是的,req.params是特殊的,因为它包含来自URL的特定于路由的值。因此,如果您有两个匹配相同请求但具有不同参数的路由模式,则您不希望在第二个路由处理程序中看到第一个路由的参数值。

  2. 您可以使用其他名称附加值,例如req._params = req.params;。然后在404处理程序中使用req._params.id