我只是想确认,当他们返回时,确实不可能让中间件处理404,500的事情:
exports.index = function(req, res) {
res.send(404);
}
理想情况下,我希望在生产中显示一个不错的缺失页面,但是如果我这样做的话,我的错误处理程序中间件永远不会被调用,无论我的配置中的事物的顺序(即之前,在app路由器之后); < / p>
一直在尝试清理我的错误处理,经过大量的谷歌搜索后,似乎我必须使用Not Found消息创建一个错误对象,此时我的中间件可以处理它。例如https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js
正确?
答案 0 :(得分:0)
在您的路线中执行以下操作:
exports.index = function(req, res, next) {
contact_db(function(result) {
if (result) {
res.end(JSON.stringify(result));
}else{
next();
}
});
}
exports.error = function(req, res) {
res.status(404).send('Not Found !!!');
}
以及您定义它们的位置,执行类似
的操作app.use(express.static());
app.get('/index', routes.index);
app.get('*', routes.error);
简化为了说明一点,你必须适应你设置你的路线等。
答案 1 :(得分:0)
好的 - 中间件可以使用完成事件,但响应已经终止,因此仅对日志记录有用。所以我想答案是不可能这样做 - 它要么做res.status(401); throw new Error('No entry!')
类型的事情要么扩展错误,例如https://github.com/machadogj/node-simple-errors
// "Catch" all status code
app.use(function(req, res, next) {
res.on('finish', function() {
// Do whatever based on status code
console.log(res.statusCode);
});
next();
});
app.use(app.router);
app.get('/missing', function(req, res, next) {
res.send(404);
});