我有以下两个中间件功能:
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);
}
});
问题:
只有第一个中间件执行(在服务器控制台上打印 'header OK!')。validateEmail 中的控制台从不打印。当我在下一个连接选项中定义的 onError 处理程序中控制台错误时,它看起来像请求对象,即。它包含带有电子邮件有效负载的正文。
调用路由会导致 500:返回内部服务器错误(在 onError 处理程序中定义)。
这个设置有什么问题?
使用的版本:
“下一个”:“11.1.2” “下一个连接”:“0.10.2”