Tengo este código Mongoose/Express que le permite actualizar un documento del usuario que inició sesión. Recibo un error: nodo: eventos: 368 throw er; // Evento 'error' no manejado ^
Error [ERR_HTTP_HEADERS_SENT]: no se pueden establecer encabezados después de enviarlos al cliente
Este es mi código.
router.post("/update/:id", checkAuth, (req, res) => { // check if the snippet was created by the user who is logged in and update the snippet with the new data from the request body Snippet.findOne({ _id: req.params.id, userId: req.userData.userId, }) .then((snippet) => { if (!snippet) { return res.status(400).json({ message: "You don't have a snippet with this ID", }); } if (req.body.title) { console.log("if statement"); Snippet.findOne( { title: req.body.title, userId: req.userData.userId, }, (titleCheckErr, titleCheckSnippet) => { if (titleCheckErr) { return res.status(500).json({ error: titleCheckErr, }); } if (titleCheckSnippet) { return res.status(400).json({ message: "You already have a snippet with that title", }); } } ); snippet.title = req.body.title; } snippet.description = req.body.description; snippet.code = req.body.code; snippet.language = req.body.language; // save the snippet snippet.save((saveSnippetErr, saveSnippet) => { if (saveSnippetErr) { return res.status(500).json({ error: saveSnippetErr, }); } return res.status(201).json({ message: "Snippet updated", snippet: saveSnippet, }); }); }) .catch((err) => { return res.status(500).json({ error: err, }); }); });Me lo imaginé. Lo estaba haciendo demasiado complicado. Simplemente cambié el uso de mongoose para verificar si el título existe, y lo convertí en una declaración if simple que mantuvo el título igual de db si no había un título de cuerpo de solicitud. Aquí está el código.
router.post("/update/:id", checkAuth, (req, res) => { // check if snippet was created by the user who is logged in, and update the snippet with new data from the request body Snippet.findOne( { _id: req.params.id, userId: req.userData.userId }, (err, snippet) => { if (err) { return res.status(500).json({ error: err, }); } if (!snippet) { return res.status(400).json({ message: "Snippet not found", }); } if (req.body.title) { snippet.title = req.body.title; } else { snippet.title = snippet.title; } snippet.description = req.body.description; snippet.code = req.body.code; snippet.language = req.body.language; // save the snippet snippet.save((saveErr, saveSnippet) => { if (saveErr) { return res.status(500).json({ error: saveErr, }); } console.log("updated"); return res.status(201).json({ message: "Snippet updated", snippet: saveSnippet, }); }); } ); });