环境:node.js,Express,Express会话包。
背景:我正在测试一个Express错误处理程序,结果出现了一个意想不到的错误。
以下简化路由引发错误。
类型错误:无法读取未定义的属性"userValues">
exports.errorHandler = wrapAsync(async function(error, req, res, next) {
let loggedIn = req.session.userValues ? true : false;
res.render('error', { loggedIn });
});
然而,当我删除error
参数时,它不会像我预期的那样出现错误。
exports.errorHandler = wrapAsync(async function(req, res, next) {
let loggedIn = req.session.userValues ? true : false;
res.render('error', { loggedIn });
});
为什么会这样?
第二个示例中的基本模式适用于几十条不包含error参数的路由。
您可以使用这样的东西。只有当有ERROR 500
时,它才会被执行,除非你使用next()
函数将ERROR 404
传递给这个,如果你正确处理了所有错误,你应该能够生成ERROR 500
,而这应该能够使catch
成为ERROR
。
const errorHandler = require("./your-file");
...
... every other route even error 404 handler
...
app.use(errorHandler);
ERROR 404
使用next()
是什么意思
如果你已经使用了express-generator
,那么你应该已经有了这张code
:
// catch 404 and forward to error handle
app.use((req, res, next) => {
next('not found');
});
如果您使用这种方法,那么结束文件现在应该是这样的:
...
... all previous routes
...
// catch 404 and forward to error handle
app.use((req, res, next) => {
next('not found');
});
// handle all other error
app.use(errorHandler);
希望这有帮助