description and source-codeexpress-unless = function (options) {
var parent = this;
var opts = typeof options === 'function' ? {custom: options} : options;
opts.useOriginalUrl = (typeof opts.useOriginalUrl === 'undefined') ? true : opts.useOriginalUrl;
return function (req, res, next) {
var url = URL.parse((opts.useOriginalUrl ? req.originalUrl : req.url) || req.url || '', true);
var skip = false;
if (opts.custom) {
skip = skip || opts.custom(req);
}
var paths = !opts.path || Array.isArray(opts.path) ?
opts.path : [opts.path];
if (paths) {
skip = skip || paths.some(function (p) {
return isUrlMatch(p, url.pathname) && isMethodMatch(p.methods, req.method);
});
}
var exts = (!opts.ext || Array.isArray(opts.ext)) ?
opts.ext : [opts.ext];
if (exts) {
skip = skip || exts.some(function (ext) {
return url.pathname.substr(ext.length * -1) === ext;
});
}
var methods = (!opts.method || Array.isArray(opts.method)) ?
opts.method : [opts.method];
if (methods) {
skip = skip || !!~methods.indexOf(req.method);
}
if (skip) {
return next();
}
parent(req, res, next);
};
}