如何在ExpressJS生产中捕获res.send(404)

时间:2013-11-27 01:31:53

标签: javascript node.js express

我只是想确认,当他们返回时,确实不可能让中间件处理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

正确?

2 个答案:

答案 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);
});