timeout-request
Version:
http timeout request middleware
40 lines (36 loc) • 1.43 kB
JavaScript
;
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;