UNPKG

azurite

Version:

An open source Azure Storage API compatible server

76 lines 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const MiddlewareError_1 = tslib_1.__importDefault(require("../errors/MiddlewareError")); /** * ErrorMiddleware handles following 2 kinds of errors thrown from previous middleware or handlers: * * 1. MiddlewareError will be serialized. * This includes most of expected errors, such as 4XX or some 5xx errors are MiddlewareError. * * 2. Other unexpected errors will be serialized to 500 Internal Server error directly. * Every this kind of error should be carefully checked, and consider to handle it as a MiddlewareError. * * @export * @param {Context} context * @param {(MiddlewareError | Error)} err A MiddlewareError or Error object * @param {Request} req An express compatible Request object * @param {Response} res An express compatible Response object * @param {NextFunction} next An express middleware next callback * @param {ILogger} logger A valid logger * @returns {void} */ function errorMiddleware(context, err, req, res, next, logger) { if (res.headersSent()) { logger.warn(`Error middleware received an error, but response.headersSent is true, pass error to next middleware`, context.contextID); return next(err); } // Only handle ServerError, for other customized error types hand over to // other error handlers. if (err instanceof MiddlewareError_1.default) { logger.error(`ErrorMiddleware: Received a MiddlewareError, fill error information to HTTP response`, context.contextID); logger.error(`ErrorMiddleware: ErrorName=${err.name} ErrorMessage=${err.message} ErrorHTTPStatusCode=${err.statusCode} ErrorHTTPStatusMessage=${err.statusMessage} ErrorHTTPHeaders=${JSON.stringify(err.headers)} ErrorHTTPBody=${JSON.stringify(err.body)} ErrorStack=${JSON.stringify(err.stack)}`, context.contextID); logger.error(`ErrorMiddleware: Set HTTP code: ${err.statusCode}`, context.contextID); res.setStatusCode(err.statusCode); if (err.statusMessage) { logger.error(`ErrorMiddleware: Set HTTP status message: ${err.statusMessage}`, context.contextID); res.setStatusMessage(err.statusMessage); } if (err.headers) { for (const key in err.headers) { if (err.headers.hasOwnProperty(key)) { const value = err.headers[key]; if (value) { logger.error(`ErrorMiddleware: Set HTTP Header: ${key}=${value}`, context.contextID); res.setHeader(key, value); } } } } if (err.contentType && req.getMethod() !== "HEAD") { logger.error(`ErrorMiddleware: Set content type: ${err.contentType}`, context.contextID); res.setContentType(err.contentType); } logger.error(`ErrorMiddleware: Set HTTP body: ${JSON.stringify(err.body)}`, context.contextID); if (err.body && req.getMethod() !== "HEAD") { res.getBodyStream().write(err.body); } } else if (err instanceof Error) { logger.error(`ErrorMiddleware: Received an error, fill error information to HTTP response`, context.contextID); logger.error(`ErrorMiddleware: ErrorName=${err.name} ErrorMessage=${err.message} ErrorStack=${JSON.stringify(err.stack)}`, context.contextID); logger.error(`ErrorMiddleware: Set HTTP code: ${500}`, context.contextID); res.setStatusCode(500); // logger.error( // `ErrorMiddleware: Set error message: ${err.message}`, // context.contextID // ); // res.getBodyStream().write(err.message); } else { logger.warn(`ErrorMiddleware: Received unhandled error object`, context.contextID); } next(); } exports.default = errorMiddleware; //# sourceMappingURL=error.middleware.js.map