如何在Node.js中管理HTTP错误

时间:2013-01-18 21:11:49

标签: node.js error-handling

您好我正在开发我的第一个Node.js应用程序,我发现我的第一个问题非常基本,我无法捕获HTTP错误(404,500,...)

我已按照文档(我想是这样)但我想我错过了一些东西。

这是我的代码:

var express = require('express')
app = express()
app.use(express.logger('dev'));

app.get('/', function(req, res) {
    res.send('Hellow World!!!')
})
app.use(app.router);
app.use(function(err, req, res, next) {
    console.error('Oh!! ERROR');
    console.error('My ERROR: ' + JSON.stringify(err));
});

app.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');

提前致谢。

1 个答案:

答案 0 :(得分:2)

因此,表达工作的方式是,如果它到达整个中间件堆栈和路由处理程序的末尾并且还没有响应,它将自动发送回退404响应而不会引发错误。这就是为什么不调用错误处理中间件的原因。默认情况下,express不会将404视为错误,这可能是想到它的正确方法。

如果您想自定义此功能,可以在堆栈末尾放置一个中间件,直接投放自定义404页面,如果您愿意,可以选择错误地调用next

app.get('/'...
app.get('/two'...
app.get(/'three'...

app.use(middleware1...
app.use(middleware2...
app.use(app.router);
app.use(function (req, res, next) {
    //Option 1: respond here
    return res.status(404).render('my_404_view');
    //Option 2: trigger error handler
    return next(new Error('404ed!'));
}

选项2将触发您的错误处理中间件。在那里,您必须从错误对象获取信息,以确定要呈现的所需视图和要发送的状态代码。我个人定义了一个errors.NotFound类,它有一个404代码,让我渲染一个友好的404页面视图。