Tiempo de respuesta de Express.js

PROBLEMA

He estado buscando tiempos de espera de solicitud / respuesta para Express.js pero todo parece estar relacionado con la conexión en lugar de la solicitud / respuesta misma.

Si una solicitud lleva mucho tiempo, se debe agotar el tiempo de espera. Obviamente, esto no debería ocurrir, pero incluso un simple error como tener un controlador de ruta sin una llamada a la callback o sin res.send() , el navegador seguirá esperando una respuesta para siempre.

Un controlador de ruta vacío es un ejemplo perfecto de esto.

 app.get('/sessions/', function(req, res, callback){}); 

FIJAR

app.use(app,router); siguiente antes de la app.use(app,router); y parecía agregar la funcionalidad de tiempo de espera. ¿Alguien tiene alguna experiencia / opinión sobre esto?

 app.use(function(req, res, next){ res.setTimeout(120000, function(){ console.log('Request has timed out.'); res.send(408); }); next(); }); 

Tenga en cuenta que he configurado el tiempo de espera en 2 minutos.

Ya existe una compatibilidad con Connect Middleware for Timeout:

 var timeout = express.timeout // express v3 and below var timeout = require('connect-timeout'); //express v4 app.use(timeout(120000)); app.use(haltOnTimedout); function haltOnTimedout(req, res, next){ if (!req.timedout) next(); } 

Si planea utilizar el middleware Timeout como un middleware de nivel superior como el anterior, el middleware haltOnTimedOut debe ser el último middleware definido en la stack y se utiliza para capturar el evento timeout. Gracias @Aichholzer por la actualización.

Nota al costado:

Tenga en cuenta que si transfiere su propio middleware de tiempo de espera, los códigos de estado 4xx son para los errores del cliente y 5xx son para los errores del servidor. 408s están reservados para cuando:

El cliente no produjo una solicitud dentro del tiempo que el servidor estaba preparado para esperar. El cliente PUEDE repetir la solicitud sin modificaciones en cualquier momento posterior.

Una actualización si uno está utilizando Express 4.2 y luego se eliminó el middleware de tiempo de espera, por lo que es necesario agregarlo manualmente con

 npm install connect-timeout 

y en el código tiene que ser (Editado como por comentario, cómo incluirlo en el código)

  var timeout = require('connect-timeout'); app.use(timeout('100s')); 

request.setTimeout(< time in milliseconds >) hace el trabajo

https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback

Antes de configurar sus rutas, agregue el código:

 app.all('*', function(req, res, next) { setTimeout(function() { next(); }, 120000); // 120 seconds });