UNPKG

timeout-request

Version:
40 lines (36 loc) 1.43 kB
"use strict"; function wrapper(my, flag) { var callback; if (flag) callback = my.header ? function(req, res) { return !0 === (!1 === res._headerSent || !1 === res.finished) ? my.callback(req, res, my.data) : null; } : function(req, res) { my.callback(req, res, my.data); }; else { var finale = function(req, res) { res.end(), req.socket.destroy(); }; callback = my.header ? function(req, res) { return !0 === (!1 === res._headerSent || !1 === res.finished) ? finale(req, res) : null; } : function(req, res) { finale(req, res); }; } return function(req, res, next) { req.timeout = setTimeout(callback.bind(this, req, res), my.milliseconds); var destroy = req.socket.destroy, end = res.end; req.socket.destroy = function() { clearTimeout(req.timeout), destroy.call(this); }, res.end = function(chunk, encoding) { clearTimeout(req.timeout), end.call(this, chunk, encoding); }, next(); }; } function timeout(opt) { var options = opt || Object.create(null), my = { milliseconds: Number(options.milliseconds) || 5e3, header: Boolean(options.header) }; return "function" == typeof options.callback ? (my.callback = options.callback, my.data = options.data, wrapper(my, !0)) : wrapper(my, !1); } module.exports = timeout;