情况:使用Express的Node.js Web应用
我在布局哈巴狗脚本中需要req
对象,所以我有:
app.use((req, res, next) => {
res.locals.req = req;
// ...
next();
});
我也有标准的错误处理程序:
app.use((err, req, res, next) => {
const statusCode = err.statusCode || 500;
res.status(statusCode).render("error");
})
以上方法在很长一段时间内都能正常工作。但是今天,我遇到了413 request entity too large
错误(因为body-parser
中的限制太低了)。发生这种情况时,在error.pug
中,所有res.local
变量都未定义。
发生错误时,代码流没有通过我的路由器中间件。我猜想是从Express内部的某个地方调用了错误处理程序。
这是设计使然吗?这是否意味着如果错误Pug脚本使用的是res.local
变量,就必须测试是否缺少res.local
变量?
如果有帮助,我的error.pug包含类似内容,并且在req
为undefined
时炸毁了:
a(href='/contact', class=(req.url.startsWith('/contact')) ? 'active' : undefined) Contact