Express.js - 从中​​间件

时间:2017-11-30 10:57:27

标签: javascript node.js express middleware

我有一个Express.js 4应用程序,错误记录了以下形式的中间件:

...
const logErrors = (err, req, res, next) => {
  logger.error(err);
  res.status(400).json({ error: err.message });
}
app.use(logErrors);

我之前处于(错误的)假设之下,通过不调用next(),请求将不会继续到我的路由处理程序。事实并非如此,因为发生错误时,会将其记录并作为响应发送给用户,但请求会继续/myroutehandler,从而导致问题。

在我记录并响应中间件中的错误后,如何停止路由/中间件链?或者正确的方法是什么?

奖金问题:由于我没有打电话next(),请求是否应该挂起?怎么/为什么快递处理这个?

编辑:

我的更多代码,找出请求从中间件跳转到路由的原因

app.use(morgan('combined', { stream: logger.inputStream }));
app.use(authMiddleware);
app.use(xmlParser({
  normalize: false,
  normalizeTags: false,
  trim: true,
  mergeAttrs: true,
  explicitArray: false
}));
app.use(logErrors);

app.post('/HotLeadsFeed', async (req, res) => {
  if (!req.body || !req.body.pi || !req.body.pi.pa) {
    //error logging
  }
  try {
    //logic
  } catch (err) {
    //error handling
  }
});

0 个答案:

没有答案