我正在對我的資料庫執行一個 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
我嘗試else在ifs上添加一個陳述句,它似乎并沒有解決問題?有任何想法嗎 ?
我的代碼片段:
// 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');
}
});
uj5u.com熱心網友回復:
這不是 Mongoose 錯誤。
在您的代碼的一些地方,您正在回傳一個回應res.json,但您沒有使用return,因此即使發送了回應,您的腳本也會繼續執行,并且在下一個時它會嘗試再次發送它res.json。
只需return在每個res.json陳述句之前添加。
return res.json(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408421.html
標籤:
