Промежуточное программное обеспечение Express next () не запускает следующее промежуточное ПО в блоке .catch () - PullRequest
0 голосов
/ 03 февраля 2019

Я не могу понять это.У меня есть POST-маршрут, который создает транзакцию через Stripe с использованием пакета Stride's Node.

Он работает нормально, пока не возникнет ошибка, скажем, например, для карты с недостаточным количеством средств.При возникновении ошибки он вызывает блок catch(), как и должно быть.В блоке улова у меня return next(err).Я уверен, что буду использовать return, потому что после обещания есть другой код, который должен выполняться только при успехе stripe.charges.create.

Однако даже при return next(err) кажется, что он продолжает выполняться,как показано console.log у меня на месте.Кроме того, маршрут возвращает статус 200 с текстом «Выполненный маршрут». У меня также сразу после этого маршрута есть глобальная ловушка ошибок.Пожалуйста, не стесняйтесь просматривать изображения, приложенные ниже для более подробной информации.

У кого-нибудь есть какие-либо идеи относительно того, почему это может происходить?Я делал эту структуру много раз прежде без проблем;не совсем уверен, что происходит.

Спасибо за любой вклад!

The route The global error handler The response

1 Ответ

0 голосов
/ 03 февраля 2019

Это потому, что 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);
}
...