Сбой связывания промежуточного программного обеспечения в следующем подключении с обработчиком ошибок
У меня есть следующие две функции промежуточного программного обеспечения:
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