我对以下代码有疑问。当发生错误时,将执行 if 语句并调用 res.send。但是,代码随后会继续执行下面的 res.json 调用。这会导致 header 错误。
使用 else 语句是执行此操作的唯一正确方法吗?我认为调用 res.send 会中断该函数。
exports.new = function (req, res) {
let team = new Team();
team.name = req.body.name;
team.description = req.body.description;
team.members = [];
// save the team and check for errors
team.save(function (err) {
if (err) {
res.status(400).send(err);
}
res.status(200).json({
message: 'Team successfully created',
team: team
});
});
};
我还尝试过使用 req、res、next 作为函数参数并使用以下方法:
if (err) {
res.status(400);
next(err);
}
res.status(200).json({
message: 'Team successfully created',
team: team
});
虽然这不会引发错误,但它仍然会继续调用最终的 res.status.json (导致 200,而不是 400 响应)
最佳答案
调用 res.end
后无法发送响应,这是在调用 res.send
函数时由express内部完成的
在您的情况下,只需在出现错误时添加return
if (err) {
return res.status(400).send(err);
}
关于javascript - 错误: Can't set headers after they are sent - Correctly handling an error in an express controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56416862/