Сбой связывания промежуточного программного обеспечения в следующем подключении с обработчиком ошибок

У меня есть следующие две функции промежуточного программного обеспечения:

      function validateEmail(req, res, next) {
  console.log('email validation');
  if (req.body.email && req.body.email.match(EMAIL_REGEX)) {
    console.log('email OK!');
    return next(req, res);
  } else {
    console.log('email wrong');

    res.json({ message: 'email invalid'});
  }
}
      function  validateOriginHeader(req, res, next) {
  if (ORIGIN_WHITELIST.includes(req.headers.origin)) {
    console.log('header OK!');
    return next(req, res);
  } else {
    console.log('header wrong!');
    res.status(403);
    res.end('game over');
  }
}

Я пытаюсь использовать их при настройке следующего подключения в pages/api, где я определяю параметры onError и onNoMatch:

      // factory fn returns new instance of newConnect with default setup
function factory() {
  return nextConnect({
    onError(err, req, res) {
      console.log('error?:', Object.keys(err));
      res.status(500).json({ message: 'Internal Server Error' });
    },
    onNoMatch(req, res) {
      res.status(405).json({ message: `Method ${req.method} is not allowed.` });
    },
  });
}
      // pages/api/subscribe.js 
export default factory()
  .use(validateOriginHeader)
  .use(validateEmail)
  .post(async (req, res) => {
    try {
      const mailchimpRes = await mailchimp.subscribe(req.body);
      res.json(mailchimpRes);
    } catch (e) {
      res.json(e);
    }
  });

Эта проблема:

Выполняется только первое промежуточное ПО (вывод «заголовок ОК!» На консоли сервера). Консоль в validateEmail никогда не печатает. Когда я консолью err в обработчике onError, определенном в параметрах next-connect, он выглядит как объект запроса, т.е. он содержит тело с полезной нагрузкой электронной почты.

Вызов маршрута приводит к выдаче 500: возвращается внутренняя ошибка сервера (как определено в обработчике onError).

Что не так с этой настройкой?

используемые версии:

"next": "11.1.2""next-connect": "0.10.2"

1 ответ

Решение

Вы должны вызывать с пустыми аргументами вместо next(req, res). Вызов next() с параметром (ами) приводит к onError

Другие вопросы по тегам