![](/img/trans.png)
[英]Mongoose Cannot set headers after they are sent to the client
[英]Mongoose : Cannot set headers after they are sent to the client
我正在對我的數據庫執行 put 請求,到目前為止一切都按預期工作,但我在控制台中有一條煩人的消息,我相信這會阻礙我的進展。
Cannot set headers after they are sent to the client
[0] (node:13816) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
我嘗試在if
上添加else
語句,它似乎並沒有解決問題? 有任何想法嗎?
我的代碼片段:
// PUT api/requests/upvote/:id
// Upvote or downvote a post
// Private
router.put('/response/upvote/:id/:response_id', auth, async (req, res) => {
try {
const request = await Requests.findById(req.params.id);
//Pull out response
const array = request.responses.filter((item) => item.id.toString());
const result = array.find(
(response) => response.id === req.params.response_id
);
if (req.body.vote_type === 'upvote') {
if (
result.upvotes.filter(
(upvote) =>
upvote.user.toString() === req.user.id &&
upvote.vote_type === 'downvote'
).length > 0
) {
const removeIndex = result.upvotes
.map(
(upvote) =>
upvote.user.toString() === req.user.id &&
upvote.vote_type === 'downvote'
)
.indexOf(req.user.id);
result.upvotes.splice(removeIndex, 1);
result.upvotes.push({
user: req.user.id,
vote_type: req.body.vote_type,
});
await request.save();
res.json(result.upvotes);
}
if (
result.upvotes.filter(
(upvote) =>
upvote.user.toString() === req.user.id &&
upvote.vote_type === 'upvote'
).length > 0
) {
res.status(400).send('You already upvoted this suggestion');
} else {
result.upvotes.push({
user: req.user.id,
vote_type: req.body.vote_type,
});
await request.save();
res.json(result.upvotes);
}
}
if (req.body.vote_type === 'downvote') {
if (
result.upvotes.filter(
(upvote) =>
upvote.user.toString() === req.user.id &&
upvote.vote_type === 'upvote'
).length > 0
) {
const removeIndex = result.upvotes
.map(
(upvote) =>
upvote.user.toString() === req.user.id &&
upvote.vote_type === 'upvote'
)
.indexOf(req.user.id);
result.upvotes.splice(removeIndex, 1);
result.upvotes.push({
user: req.user.id,
vote_type: req.body.vote_type,
});
await request.save();
res.json(result.upvotes);
}
if (
result.upvotes.filter(
(upvote) =>
upvote.user.toString() === req.user.id &&
upvote.vote_type === 'downvote'
).length > 0
) {
res.status(400).send('You already downvoted this suggestion');
} else {
result.upvotes.push({
user: req.user.id,
vote_type: req.body.vote_type,
});
await request.save();
res.json(result.upvotes);
}
}
} catch (error) {
console.error(error.message);
res.status(500).send('Server Error');
}
});
這不是 Mongoose 錯誤。
在您的代碼的幾個地方,您正在返回一個帶有res.json
的響應,但是您沒有使用return
,因此即使發送了響應,您的腳本也會繼續執行,並且它會在下一個時嘗試再次發送它res.json
。
只需在每個res.json
語句之前添加return
即可。
return res.json(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.