Express.js HTTP request timeout

I was wondering if anyone could tell me that the default HTTP request timeout is to use express.

What do I mean by this: after how many seconds of working with an HTTP request will the Express / Node.js server be closed when the browser or server closed the connection manually?

How to change this timeout for one route? I would like to set about 15 minutes for a special audio conversion route.

Many thanks.

Tom

+8
source share
3 answers

req.connection.setTimeout(ms); may be a bad idea, as multiple requests can be sent over the same socket.

Try connect-timeout or use this:

 var errors = require('./errors'); const DEFAULT_TIMEOUT = 10000; const DEFAULT_UPLOAD_TIMEOUT = 2 * 60 * 1000; /* Throws an error after the specified request timeout elapses. Options include: - timeout - uploadTimeout - errorPrototype (the type of Error to throw) */ module.exports = function(options) { //Set options options = options || {}; if(options.timeout == null) options.timeout = DEFAULT_TIMEOUT; if(options.uploadTimeout == null) options.uploadTimeout = DEFAULT_UPLOAD_TIMEOUT; return function(req, res, next) { //timeout is the timeout timeout for this request var tid, timeout = req.is('multipart/form-data') ? options.uploadTimeout : options.timeout; //Add setTimeout and clearTimeout functions req.setTimeout = function(newTimeout) { if(newTimeout != null) timeout = newTimeout; //Reset the timeout for this request req.clearTimeout(); tid = setTimeout(function() { if(options.throwError && !res.finished) { //throw the error var proto = options.error == null ? Error : options.error; next(new proto("Timeout " + req.method + " " + req.url) ); } }, timeout); }; req.clearTimeout = function() { clearTimeout(tid); }; req.getTimeout = function() { return timeout; }; //proxy end to clear the timeout var oldEnd = res.end; res.end = function() { req.clearTimeout(); res.end = oldEnd; return res.end.apply(res, arguments); } //start the timer req.setTimeout(); next(); }; } 
+5
source

req.connection.setTimeout(ms); appears to set the request timeout for the HTTP server in Node.js.

+6
source

The default request timeout in node v0. 9+ is 2 minutes . This is what express uses.

You can increase it for one route using:

 app.get('/longendpoint', function (req, res) { req.setTimeout(360000); // 5 minutes ... }); 
0
source

All Articles