Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

116
Views
Nodejs: no se pueden establecer encabezados después de que se envían al

Escribo este código con NodeJS:

 const setOutput = (res, req, data) => { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(data)); } app.post('/getDb', async (req, res, next) => { if (!req.body.hasOwnProperty('key')) { setOutput(res, req, { error: true, message: 'You must send key' }) } const db = openDb(req.body.key); if (!db) { setOutput(res, req, { error: true, message: 'Not found key' }) } setOutput(res, req, { error: false, message: 'DB create successful', data: { min: 0.1 } }); })

Este código funciona bien, pero me sale este error:

 (node:253965) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

¿Cómo puedo detener algo después de llamar a setOutput ?

Nota: no quiero usar el switch o mucho if else

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Básicamente, está intentando llamar a la función de flecha setOutput varias veces en una solicitud. Es por eso que terminar la ejecución después del envío puede ayudar:

 if (!req.body.hasOwnProperty('key')) { setOutput(res, req, { error: true, message: 'You must send key' }) return; } const db = openDb(req.body.key); if (!db) { setOutput(res, req, { error: true, message: 'Not found key' }) return; }
about 4 years ago · Juan Pablo Isaza Report

0

En su solicitud, está invocando setOutput varias veces, lo que significa que la solicitud se enviará al cliente, pero la función de devolución de llamada en app.post sigue ejecutándose porque no ha devuelto nada de la devolución de llamada de app.post que invocó al otro función que en este caso es setOuput, por lo que en el mundo de nodejs el error simplemente significa que enviaría una respuesta al cliente ahora que no puede preparar encabezados, la solución simple sería regresar después de enviar cada solicitud como esta `

 app.post('/getDb', async (req, res, next) => { if (!req.body.hasOwnProperty('key')) { return setOutput(res, req, { error: true, message: 'You must send key' }) } const db = openDb(req.body.key); if (!db) { return setOutput(res, req, { error: true, message: 'Not found key' }) } setOutput(res, req, { error: false, message: 'DB create successful', data: { min: 0.1 } }); })

`

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!