为什么 Express 错误处理中间件可能收不到 req.session?
Why might Express error handling middleware not receive req.session?
环境: node.js,Express,express-session 包。
背景:我正在测试一个 Express 错误处理程序,我得到了一个我没有预料到的错误。
以下简化路线会引发错误。
TypeError: Cannot read property 'userValues' of undefined
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 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);
希望对您有所帮助
环境: node.js,Express,express-session 包。
背景:我正在测试一个 Express 错误处理程序,我得到了一个我没有预料到的错误。
以下简化路线会引发错误。
TypeError: Cannot read property 'userValues' of undefined
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 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);
希望对您有所帮助