UNPKG

node-web-mvc

Version:
78 lines (77 loc) 3.77 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const HttpHeaders_1 = __importDefault(require("../../http/HttpHeaders")); const HttpMethod_1 = __importDefault(require("../../http/HttpMethod")); const HttpRequestValidation_1 = __importDefault(require("../../http/HttpRequestValidation")); const HttpStatus_1 = __importDefault(require("../../http/HttpStatus")); const HttpEntity_1 = __importDefault(require("../../models/HttpEntity")); const RequestEntity_1 = __importDefault(require("../../models/RequestEntity")); const ResponseEntity_1 = __importDefault(require("../../models/ResponseEntity")); const AbstractMessageConverterMethodProcessor_1 = __importDefault(require("./AbstractMessageConverterMethodProcessor")); class HttpEntityMethodProcessor extends AbstractMessageConverterMethodProcessor_1.default { constructor(messageConverters, contentNegotiationManager) { super(messageConverters, contentNegotiationManager); } supportsReturnType(returnType) { return returnType.isParamAssignableOf(ResponseEntity_1.default); } handleReturnValue(entity, returnType, servletContext) { const response = servletContext.response; const headers = entity.headers; const responseStatus = entity.responseStatus; // 合并Http返回头 Object.keys(entity.headers).forEach((key) => { if (key.toLowerCase() === 'vary') { response.addHeader(key, headers[key]); } else { response.setHeader(key, entity.headers[key]); } }); // 设置返回头 response.setStatus(responseStatus); if (HttpStatus_1.default.OK.equals(responseStatus) && this.isResourceNotModified(servletContext)) { return; } else if (HttpStatus_1.default.OK.code / 100 == 3) { // 重定向处理 } return this.writeWithMessageConverters(entity.body, servletContext); } isResourceNotModified(servletContext) { var _a; const { request, response } = servletContext; const method = request.method; if (method != HttpMethod_1.default.GET && method != HttpMethod_1.default.HEAD) { return false; } const etag = (_a = response.getHeaderValue(HttpHeaders_1.default.ETAG)) === null || _a === void 0 ? void 0 : _a[0]; const lastModified = response.getLastModifiedTime().getTime(); const validation = new HttpRequestValidation_1.default(request, response); response.removeHeader(HttpHeaders_1.default.LAST_MODIFIED); response.removeHeader(HttpHeaders_1.default.ETAG); return validation.checkNotModified(String(etag), lastModified); } supportsParameter(parameter, servletContext) { return parameter.isParamAssignableOf(RequestEntity_1.default) || parameter.parameterType === HttpEntity_1.default; } resolveArgument(parameter, servletContext) { const request = servletContext.request; if (parameter.parameterType === HttpEntity_1.default) { return new HttpEntity_1.default(null, request.headers); } const runtimeType = parameter.getParameterGenericTypeOf(1); const type = runtimeType || Object; let data = null; if (request.hasBody) { data = this.readWithMessageConverters(servletContext, type); } const url = request.requestUrl; const method = request.method; return new RequestEntity_1.default(url, method, data, request.headers); } } exports.default = HttpEntityMethodProcessor;