|
|
/*! * Connect - timeout * Ported from https://github.com/LearnBoost/connect-timeout
* MIT Licensed */
/** * Module dependencies. */
var debug = require('debug')('connect:timeout');
/** * Timeout: * * Times out the request in `ms`, defaulting to `5000`. The * method `req.clearTimeout()` is added to revert this behaviour * programmatically within your application's middleware, routes, etc. * * The timeout error is passed to `next()` so that you may customize * the response behaviour. This error has the `.timeout` property as * well as `.status == 408`. * * @param {Number} ms * @return {Function} * @api public */
module.exports = function timeout(ms) { ms = ms || 5000;
return function(req, res, next) { var id = setTimeout(function(){ req.emit('timeout', ms); }, ms);
req.on('timeout', function(){ if (res.headerSent) return debug('response started, cannot timeout'); var err = new Error('Response timeout'); err.timeout = ms; err.status = 503; next(err); });
req.clearTimeout = function(){ clearTimeout(id); };
res.on('header', function(){ clearTimeout(id); });
next(); }; };
|