0

嗨,我正在开发我的第一个 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/');

提前致谢。

4

1 回答 1

2

所以 express 的工作方式是,如果它到达整个中间件和路由处理程序堆栈的末尾并且还没有任何响应,它将自动发送回退 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 页面视图。

于 2013-01-18T21:32:39.517 回答