Express next()中间件不会在.catch()块中触发下一个中间件

时间:2019-02-03 09:07:59

标签: javascript node.js express promise

我似乎无法弄清楚这一点。我有一个POST路由,该路由使用Stripe的Node包通过Stripe创建事务。

它可以正常工作,直到出现错误为止,例如卡片资金不足。发生错误时,它将按预期方式调用catch()块。在catch块中,我有return next(err)。我肯定会使用return,因为在承诺之后还有其他代码仅应在stripe.charges.create成功后才能运行。

但是,即使使用return next(err),它似乎仍在继续运行,如我所使用的console.log所示。另外,该路由返回200状态,带有“已执行的路由”文本。在此路由之后,我还有一个全局错误捕获器。请随时查看下面所附的图片以获取更多详细信息。

对于为什么会发生这种情况,有人有任何想法吗?在没有问题之前,我已经完成了很多次此结构。不太清楚发生了什么。

感谢您的输入!

The route The global error handler The response

1 个答案:

答案 0 :(得分:1)

这是因为catch与外部代码不在同一范围内。

您已经在这里使用async / await,所以只需使用try...catch而不是回调

try {
  const charge = await stripe.charges.create({
    amount: 100,
    currency: 'usd'
    source: req.body.cardSource
  });
  console.log('Running');
  res.send('Executed route');
} catch (e) {
  return next(e);
}