express-timeout-handler
Express timeout middleware that ensures a response is returned to the client on a timeout event.
Add a global timeout to all your routes in express and add individual timeouts to specific routes. If a timeout happens the onTimeout
function will be called. The onTimeout
function MUST terminate the request with a response. When a timeout happens, this module will set a globalTimeout
property on the response object to true and disable all methods on the response object which might try and send something after the timeout happened.
Note on streams: whenever a stream has started streaming to the response object, the onTimeout
function will not be triggered. Or in other words: if a timeout happens after we start streaming, the stream will not be interrupted.
npm install --save express-timeout-handler
Usage
var timeout = require('express-timeout-handler');
var express = require('express');
var app = express();
var options = {
timeout: 3000,
onTimeout: function(req, res) {
res.status(503).send('Service unavailable. Please retry.');
},
onDelayedResponse: function(req, method, args, requestTime) {
console.log(`Attempted to call ${method} after timeout`);
},
disable: ['write', 'setHeaders', 'send', 'json', 'end'];
};
app.use(timeout.handler(options));
app.get('/greet',
function (req, res) {
res.send('Hello world!');
}
);
app.get('/leave',
timeout.set(4000),
function (req, res) {
res.send('Goodbye!');
}
);
app.listen(3000, function () {
console.log('Server listening on port 3000');
});
License
MIT