Обработка ошибок Коа: необходимо ли возвращение? - PullRequest
0 голосов
/ 16 декабря 2018

Я использую коа-роутеры для обработки маршрута для отправки запроса электронной почты стороннему API.Я правильно обрабатываю ошибки?Нужно ли что-нибудь вернуть?Должен ли я вернуть ctx.response?Я вижу несколько примеров, которые завершают функцию с помощью await next ().Тем не менее, я предполагаю, что мне это не нужно, так как нет другого func / middleware для нисходящего потока до.

router.post('sendemail', async (ctx) => {
  const emailData = ctx.request.body;
  try {
    await someEmailApi({
      recipient: {
        name: emailData.recipientName,
        address: emailData.recipientEmail,
      },
      sender: {
        name: emailData.senderName,
        address: emailData.senderEmail,
      },
      subject: mail.subject,
      message: mail.message,
    });

    ctx.response.status = 200;
    ctx.response.body = 'OK';
  } catch (err) {

    ctx.response.status = err.status;
    ctx.response.body = err.message';
    ctx.throw(ctx.response.status, ctx.response.body);
  }
});

1 Ответ

0 голосов
/ 17 декабря 2018

Так как это обработчик маршрута, вы обычно не вызываете await next(), потому что обработчик маршрута в любом случае является «самым внутренним» промежуточным программным обеспечением, поэтому next() - это неоперация.

Если вы используете ctx.throw, вам не нужно устанавливать статус и тело отдельно.

Этого должно быть достаточно:

ctx.throw(err.status, err.message)
...