为什么Express错误处理中间件可能无法接收请求会话



环境: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);

希望这有帮助

最新更新