UNPKG

connect-slow

Version:

Middleware to delay answering requests based on request url, useful to diagnose website behavior based on load delays

71 lines (59 loc) 1.71 kB
var isRegExp = require('lodash.isregexp'), parseUrl = require('url').parse; module.exports = function connectSlowConfig(options) { options = options || {}; if (options.url) { if (!isRegExp(options.url)) { throw new Error('url should be a RegExp to check request url, not ' + options.url); } } if (options.delay === undefined) { options.delay = 1000; } if (options.delay < 0) { throw new Error('Delay should be positive number, not ' + options.delay); } // Return the query delay if it makes sense for this request, else undefined function getQueryDelay(url) { var delay; if (options.delayQueryParam) { var parsedUrl = parseUrl(url, true); if (parsedUrl.query && parsedUrl.query[options.delayQueryParam]) { var queryDelay = parseInt(parsedUrl.query[options.delayQueryParam]); if (queryDelay > 0) { delay = queryDelay; } } } return delay; } // Return the url delay if it makes sense for this request, else undefined function getUrlDelay(url) { var delay; if (options.url && !options.url.test(url)) { delay = 0; } return delay; } function getDelay(url) { var delay = getQueryDelay(url); if (delay === undefined) { delay = getUrlDelay(url); } if (delay === undefined) { delay = options.delay; } return delay; } return function connectSlow(req, res, next) { var delay = getDelay(req.url); if (delay !== undefined && delay > 0) { if (options.debug) { console.log('Connect-slow: delaying %s ms on url %s', delay, req.url); } setTimeout(next, delay); } else { next(); } }; };