Я искал эту ошибку, вызванную res.send
дважды. Решение должно использовать return res.send
.
Но это не работает для меня.
Вот мой код:
function editFoo(req, res) {
ErrorResponse.checkError422(req, res)
console.log("shouldn't print")
Foo.findAndUpdate({_id:req.params.activityId}, {$set:{title:req.body.title}}, {new: true}, function(err, activity) {
return res.send({code: 0, newTitle: activity.title, message: "Edit successfully"})
})
}
ErrorResponse.js
function checkError422(req, res) {
const errors = validationResult(req)
if (!errors.isEmpty()) {
return res.status(422).send({error: "xxx"})
}
}
module.exports = { checkError422 }
Тогда я получил ошибку:
Error: Can't set headers after they are sent.
и shouldn't print
напечатано.
Но если я заменил ErrorResponse.checkError422(req, res)
на код ошибки проверки напрямую,
function editFoo(req, res) {
const errors = validationResult(req)
if (!errors.isEmpty()) {
return res.status(422).send({error: "xxx"})
}
console.log("shouldn't print")
Foo.findAndUpdate({_id:req.params.activityId}, {$set:{title:req.body.title}}, {new: true}, function(err, activity) {
return res.send({code: 0, newTitle: activity.title, message: "Edit successfully"})
})
}
хорошо работает и не печатает "shouldn't print
"
Не уверен, что здесь не так. Я хочу использовать функцию checkError422
для замены многих проверок. я думаю
return res.status(422).send({error: "xxx"})
должен выйти из этого editFoo
.
Почему? Спасибо за помощь.