【发布时间】:2022-01-11 23:04:26
【问题描述】:
我正在对我的数据库执行 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
我尝试在ifs 上添加else 语句,但似乎并没有解决问题?有什么想法吗?
我的代码的 sn-p :
// 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');
}
});
【问题讨论】:
标签: node.js database mongodb express mongoose