我搜索了两次由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
。
为什么?感谢您的帮助。
答案 0 :(得分:0)
我看到在您的代码中checkError422
仍然可以res
发送答案...所以您必须做相反的操作...
// checkError422
if (!errors.isEmpty()) {
return res.status(422).send({error: "xxx"})
}
所以:
function editFoo(req, res) {
const errors = validationResult(req)
if (errors.isEmpty()) {
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"})
})
}
}
更新
您的代码已更新,因此您只需要执行以下操作即可:
function checkError422(req, res) {
return validationResult(req)
}
module.exports = { checkError422 }