UNPKG

http-errors-express

Version:

Express middleware for handling errors created with the http-errors package.

107 lines (90 loc) 2.8 kB
'use strict'; 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;