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
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; }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 } }); })`