所有res.local变量在错误处理程序中变为未定义

时间:2018-08-23 13:25:35

标签: node.js express

情况:使用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包含类似内容,并且在requndefined时炸毁了:

a(href='/contact', class=(req.url.startsWith('/contact')) ? 'active' : undefined) Contact

0 个答案:

没有答案