I'm performing a put request on my database, so far everything is working as intended, but I have this annoying message in the console that I believe will hinder my progression.
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
I tried adding an else statement on the ifs and it's doesn't seem to solve the problem? Any ideas ?
A snippet of my code :
// 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');
}
});