Necesito definir un tiempo de espera para rutas específicas en Express para que, en lugar de obtener un error de tiempo de espera predeterminado del servidor, mi API devuelva datos JSON. Lo agrego así al comienzo del enrutador. Obtenga la función de devolución de llamada
router.get('/', function (req, res, next) { res.setTimeout(10000, function () { res.status(500).json({ error: 'Response Processing Timed Out.' }); }); /* some time-consuming code here */ res.json(result); //this should never happen if timeout occurs });y eso (parte del tiempo de espera) funciona bien (devuelve un mensaje de error JSON al cliente en el tiempo de espera, como se esperaba).
El problema es que el resto del código aún se ejecuta y cuando llega al método res.json regular - res.json(result) aparece el error ERR_HTTP_HEADERS_SENT (como debería ser, porque intenta hacer otro res.json después de que ya se haya enviado el que contiene el mensaje de error)
Si esa fuera una verificación ordinaria de errores, agregaría una declaración de devolución después de res.json, pero no lo está: está dentro de una función de devolución de llamada y una devolución simplemente finalizaría la devolución de llamada, pero no la función principal (en este caso, el enrutador. obtener la función de devolución de llamada). Sé que podría establecer alguna variable en verdadero cuando se agote el tiempo de espera y luego verificar si es verdadero antes de cualquier res.json, pero me gustaría evitar eso (tengo bastantes líneas res.json en la función, y también Me gustaría evitar ejecutar un código que consume mucho tiempo si el mensaje de error ya se envió)
¿Alguna idea sobre cómo resolver esto? Si res.setTimeout no es la forma correcta, estaré encantado de aprender la forma correcta de hacerlo.
Gracias