Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么Express错误处理中间件不能接收req.session?_Node.js_Express_Express Session - Fatal编程技术网

Node.js 为什么Express错误处理中间件不能接收req.session?

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

环境:node.js、Express、Express会话包

背景:我正在测试一个Express错误处理程序,结果得到了一个我没有预料到的错误

以下简化路由引发错误

TypeError:无法读取未定义的属性“userValues”

但是,当我删除error参数时,它不会像我预期的那样出现错误

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);