我正在學習網上的教程。這是一個帶有 mongo/mongoose 的 MERN 專案。當我在控制器中實作更新功能時,發生了以下錯誤:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我已經看到了有關類似問題的答案,他們說這是因為有 2 次或多次呼叫 res(res.json()、res.send() 等),但我不知道我必須在哪里更改它在以下功能中:
module.exports.updateUser = async(req, res) => {
if (!ObjectID.isValid(req.params.id))
return res.status(400).send("ID unknown : " req.params.id);
try {
await UserModel.findOneAndUpdate({
_id: req.params.id
}, {
$set: {
bio: req.body.bio
}
},
(err, docs) => {
if (!err)
return res.send(docs);
if (err)
return res.status(500).send({ message: err });
}
)
} catch (err) {
return res.status(500).json({ message: err });
}
};
uj5u.com熱心網友回復:
您可能混淆了兩種不同的錯誤處理模式。
如果您使用內置的錯誤處理,則不需要 try/catch findOneAndUpdate()
await UserModel.findOneAndUpdate({
_id: req.params.id
}, {
$set: {
bio: req.body.bio
}
},
(err, docs) => {
if (!err)
return res.send(docs);
if (err)
return res.status(500).send({ message: err });
}
)
如果您使用的是 try/catch,則不需要 findOneAndUpdate 的錯誤處理:
try {
const user = await UserModel.findOneAndUpdate({
_id: req.params.id
}, {
$set: {
bio: req.body.bio
}
})
return res.send(user)
} catch (err) {
return res.status(500).json({ message: err });
}
uj5u.com熱心網友回復:
你能不能像這樣更改代碼:
module.exports.updateUser = async(req, res) => {
if (!ObjectID.isValid(req.params.id))
return res.status(400).send("ID unknown : " req.params.id);
try {
const result = await UserModel.findOneAndUpdate({
_id: req.params.id
}, {
$set: {
bio: req.body.bio
}
});
return res.send(result);
} catch (err) {
return res.status(500).json({ message: err });
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/353499.html
