UNPKG

node-web-mvc

Version:
51 lines (50 loc) 2.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Javascript_1 = __importDefault(require("../../../interface/Javascript")); const Component_1 = __importDefault(require("../../../ioc/annotations/Component")); const Serialization_1 = __importDefault(require("../../../serialization/Serialization")); const RuntimeAnnotation_1 = __importDefault(require("../../annotations/annotation/RuntimeAnnotation")); const ModelAndView_1 = __importDefault(require("../../models/ModelAndView")); const ViewRender_1 = __importDefault(require("../../view/ViewRender")); const MediaType_1 = __importDefault(require("../MediaType")); const DefaultErrorAttributes_1 = __importDefault(require("./DefaultErrorAttributes")); const ErrorAttributes_1 = __importDefault(require("./ErrorAttributes")); class InternalErrorHandler { constructor(beanFactory, registry) { var _a; this.registry = registry; const isExtendErrorAttributes = (m) => Javascript_1.default.createTyper(m.ctor).isType(ErrorAttributes_1.default); const MyErrorAttributes = (_a = RuntimeAnnotation_1.default.getAnnotations(Component_1.default).find(isExtendErrorAttributes)) === null || _a === void 0 ? void 0 : _a.ctor; if (MyErrorAttributes) { this.errorAttributes = beanFactory.getBean(MyErrorAttributes); } else { this.errorAttributes = new DefaultErrorAttributes_1.default(); } } async tryResolveException(servletContext) { if (!servletContext.response.hasError || servletContext.isRequestHandled) { // 如果不需要处理异常 return; } const accept = servletContext.request.getHeaderValue('accept').join(','); const acceptHtml = accept.toLowerCase().indexOf('text/html') > -1; return acceptHtml ? this.handleErrorHtml(servletContext) : this.handleError(servletContext); } handleError(servletContext) { const serialization = new Serialization_1.default(); const response = servletContext.response; const data = this.errorAttributes.getErrorAttributes(servletContext); return response.fullResponse(serialization.serialize(data), MediaType_1.default.APPLICATION_JSON); } handleErrorHtml(servletContext) { const data = this.errorAttributes.getErrorAttributes(servletContext); const mv = new ModelAndView_1.default('error', data); const render = new ViewRender_1.default(this.registry); return render.render(mv, servletContext); } } exports.default = InternalErrorHandler;