node-web-mvc
Version:
node spring mvc
43 lines (42 loc) • 1.55 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ViewNotFoundError_1 = __importDefault(require("../../errors/ViewNotFoundError"));
const View_1 = __importDefault(require("./View"));
class ViewRender {
constructor(viewResolverRegistry) {
this.viewResolverRegistry = viewResolverRegistry;
}
async render(mv, servletContext) {
const { request, response } = servletContext;
if (response.headersSent) {
// 如果前置流程已处理了返回
return;
}
// 查找视图
const view = this.resolveView(mv, servletContext);
if (mv.status) {
servletContext.response.setStatus(mv.status);
}
// 渲染视图
return view.render(mv.model, request, response);
}
resolveView(mv, servletContext) {
const { request } = servletContext;
const viewResolvers = this.viewResolverRegistry.viewResolvers;
if (mv.view instanceof View_1.default) {
return mv.view;
}
for (const resolver of viewResolvers) {
const view = resolver.resolveViewName(mv.view, mv.model, request);
if (view) {
return view;
}
}
// 如果没有查到视图,则抛出异常
throw new ViewNotFoundError_1.default(mv.view || '\'\'');
}
}
exports.default = ViewRender;