mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-11-03 04:25:55 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*!
 | 
						|
 * 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();
 | 
						|
  };
 | 
						|
};
 |