Estoy tratando de enviar una solicitud al servidor para guardar una publicación. Estoy usando Nextjs y cada vez que intento enviarlo me da este error [ERR_HTTP_HEADERS_SENT]: no se pueden establecer encabezados después de que se envían al cliente.
Aquí está mi código
Post.js async function uploadPost(post) { const response = await fetch('/api/savePost', { method: 'POST', body: post, }); if(!response.ok) { throw new Error('Failed to post') } return await response.json();}
savePost.js export const config = { api: { bodyParser: false, }, } export default const post = async (req, res) => { if (req.method !== 'POST') { return res.status(405).json({ message: 'Method not allowed' }) } // const postData = JSON.parse(req.body); const savedPost = await prisma.post.create({ data: req.body }); res.status(200).json({message: 'Post saved successfully'}) res.json(savedPost) };Estoy usando Prisma para la base de datos. Me sale este error.
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at new NodeError (node:internal/errors:371:5) at ServerResponse.setHeader (node:_http_outgoing:576:11) at NodeNextResponse.setHeader (C:\Users\user\Documents\My Received Files\js\twitter-clone\node_modules\next\dist\server\base-http\node.js:56:19) at DevServer.renderError (C:\Users\user\Documents\My Received Files\js\twitter-clone\node_modules\next\dist\server\base-server.js:1134:17) at DevServer.renderError (C:\Users\user\Documents\My Received Files\js\twitter-clone\node_modules\next\dist\server\next-server.js:493:22) at DevServer.run (C:\Users\user\Documents\My Received Files\js\twitter-clone\node_modules\next\dist\server\dev\next-dev-server.js:452:35) at async DevServer.handleRequest (C:\Users\user\Documents\My Received Files\js\twitter-clone\node_modules\next\dist\server\base-server.js:307:20) { code: 'ERR_HTTP_HEADERS_SENT' } error - uncaughtException: Error [ERR_STREAM_WRITE_AFTER_END]: write after end res.status(200).json({message: 'Post saved successfully'}) res.json(savedPost)Aquí envías 2 mensajes de vuelta. Ambos con código 200. Esto es lo que significa "escribir después de enviar".
El primer conjunto de mensajes es el encabezado y va hacia atrás.
Luego, después de eso, intenta hacerlo nuevamente, pero el encabezado ya está enviado.
// res.json() es igual a res.status(200).json()
// Puede fusionar res.status(200).json({mensaje: 'Publicación guardada con éxito', SavedPost: SavedPost})