【问题标题】:Express next() middleware is not firing next middleware in .catch() blockExpress next() 中间件未触发 .catch() 块中的下一个中间件
【发布时间】:2019-06-27 07:45:53
【问题描述】:

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

它可以正常工作,直到出现错误,例如资金不足的卡。当错误发生时,它应该调用catch() 块。在 catch 块中,我有 return next(err)。我肯定会使用return,因为在promise 之后还有其他代码只能在stripe.charges.create 成功后运行。

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

有人对为什么会发生这种情况有任何想法吗?我以前做过很多次这种结构,没有任何问题;不太清楚发生了什么。

感谢您的任何意见!

【问题讨论】:

  • 以后,请以文字形式发布代码,而不是屏幕截图。无法搜索、无法复制粘贴到答案中、在小屏幕上更难阅读、更高的带宽使用率等等......

标签: javascript node.js express promise


【解决方案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);
}

【讨论】:

  • 谢谢!但是,promise catch 不应该与提供的错误以及 return 语句一起转到下一个中​​间件吗?还是我错了?
  • @Blake 你的 promise catch 可以,但它不会阻止其余代码的执行——这不是你想要避免的吗? FWIW 使用 return 与此示例中的捕获无关。
  • 感谢您的回复。我会接受你的回答。我也参考了这个,它是帮手。由于捕获已超过“不返回点”stackoverflow.com/questions/49417580/…
猜你喜欢
  • 2018-01-28
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2016-03-31
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
相关资源
最近更新 更多