Node.js 为什么Express错误处理中间件不能接收req.session?
环境:node.js、Express、Express会话包 背景:我正在测试一个Express错误处理程序,结果得到了一个我没有预料到的错误 以下简化路由引发错误 TypeError:无法读取未定义的属性“userValues” 但是,当我删除error参数时,它不会像我预期的那样出现错误Node.js 为什么Express错误处理中间件不能接收req.session?,node.js,express,express-session,Node.js,Express,Express Session,环境:node.js、Express、Express会话包 背景:我正在测试一个Express错误处理程序,结果得到了一个我没有预料到的错误 以下简化路由引发错误 TypeError:无法读取未定义的属性“userValues” 但是,当我删除error参数时,它不会像我预期的那样出现错误 exports.errorHandler = wrapAsync(async function(req, res, next) { let loggedIn = req.session.userVa
exports.errorHandler = wrapAsync(async function(req, res, next) {
let loggedIn = req.session.userValues ? true : false;
res.render('error', { loggedIn });
});
为什么会这样
第二个示例中的基本模式适用于几十条不包含错误参数的路由。您可以使用类似的方法。它只会在出现错误500时执行,除非您使用下一个函数将错误404传递给这个,如果您正确处理了所有错误,您应该能够生成错误500,并且应该能够捕获该错误 const errorHandler=require./your file; ... ... 每隔一个路由甚至错误404处理程序 ... app.useerrorHandler; 我对错误404使用next是什么意思 如果您使用过express generator,那么您应该已经拥有以下代码: //捕获404并转发到错误句柄 app.usereq,res,next=>{ 下一个“未找到”; }; 如果使用这种方法,现在的结束文件应该是这样的:
...
... 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);
希望这有助于您在何处以及如何使用errorHandler?它应该是得到的最后一个函数called@midrizi通常它是堆栈的底部。出于测试目的,我创建了一个get路由来查看渲染的ej。router.get'/error',middleware.errorHandler;首先,让它异步是没有意义的,其次,你不能把它分配给一个路由,这意味着会出错
...
... 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);