node-web-mvc
Version:
node spring mvc
51 lines (50 loc) • 2.74 kB
JavaScript
;
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;