Express.js响应超时

问题

我一直在寻找Express.js的请求/响应超时,但一切似乎与连接而不是请求/响应本身有关。

如果请求花费很长时间,则应该超时。 显然这不应该发生,但即使是一个简单的错误,因为有一个没有调用callback或没有res.send()的路由处理程序,浏览器将一直等待回复。

一个空的路由处理器就是一个很好的例子。

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

固定

app.use(app,router); 之前添加了以下内容app.use(app,router); 它似乎增加了超时function。 有没有人有任何经验/意见呢?

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

请注意,我已将超时设置为2分钟。

已经有一个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(); } 

如果您打算将Timeout中间件用作上述的顶级中间件,则haltOnTimedOut中间件需要成为堆栈中定义的最后一个中间件,用于捕获超时事件。 感谢@Aichholzer的更新。

边注:

请记住,如果您推出自己的超时中间件,则4xx状态代码用于客户端错误,5xx用于服务器错误。 408s是保留的时候:

客户端在服务器准备等待的时间内没有发出请求。 客户可以随时重复请求而不做任何修改。

更新如果使用Express 4.2,则超时中间件已被删除,因此需要手动添加

 npm install connect-timeout 

并在代码中必须是

  app.use(timeout('100s')); 

在设置路线之前,添加代码:

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