我正在使用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处理程序?
答案 0 :(得分:1)
您的问题的答案是:
是的,req.params
是特殊的,因为它包含来自URL的特定于路由的值。因此,如果您有两个匹配相同请求但具有不同参数的路由模式,则您不希望在第二个路由处理程序中看到第一个路由的参数值。
您可以使用其他名称附加值,例如req._params = req.params;
。然后在404处理程序中使用req._params.id
。