http-errors-express
Version:
Express middleware for handling errors created with the http-errors package.
107 lines (90 loc) • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
/* eslint-disable no-console */
var defaults = exports.defaults = {
before: function before(err, req, isExposed, cb) {
if (isExposed) return cb();
console.error(err);
cb();
},
formatError: function formatError(err, req, isExposed) {
if (isExposed) {
return {
error: {
name: err.name,
message: err.message,
detail: err.detail
}
};
}
return {
error: {
name: err.name
}
};
}
};
var noop = function noop() {};
var isPromise = function isPromise(v) {
return !!(v && typeof v.then === 'function');
};
var httpErrors = function httpErrors() {
var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
// for backwards compatibility, httpErrors used to take
// a single logError argument which was called only on
// unexposed errors
if (typeof opts === 'function') {
var _ret = function () {
var logError = opts;
return {
v: httpErrors({
before: function before(err, req, isExposed, cb) {
if (isExposed) return cb();
logError(err, req, true);
return cb();
}
})
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
var _opts$before = opts.before;
var before = _opts$before === undefined ? defaults.before : _opts$before;
var _opts$formatError = opts.formatError;
var formatError = _opts$formatError === undefined ? defaults.formatError : _opts$formatError;
/* eslint-disable no-unused-vars */
return function (err, req, res, next) {
var maybeJson = res.headersSent ? noop : function (json) {
return res.json(json);
};
if (!res.headersSent) {
if (err.status) {
res.status(err.status);
} else {
res.status(500);
}
res.set('Cache-Control', null);
}
var isExposed = err.expose;
var cbWasCalled = false;
var cb = function cb(beforeErr) {
if (beforeErr) {
console.warn('http-errors-express: error in before() function: ');
console.warn(err);
}
if (cbWasCalled) return;
cbWasCalled = true;
maybeJson(formatError(err, req, isExposed));
};
var maybePromise = before(err, req, isExposed, cb);
if (isPromise(maybePromise)) {
maybePromise.then(function () {
cb();
}, cb);
}
};
};
exports.default = httpErrors;