您好我正在开发我的第一个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/');
提前致谢。
答案 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页面视图。