UNPKG

@jiaxinjiang/nest-http

Version:

Http request component for NestJs.

134 lines 6.38 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var HttpFetchService_1; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("@nestjs/common"); const http_exception_1 = require("./http.exception"); const http_helper_1 = require("./http.helper"); const http_constants_1 = require("./http.constants"); const http_interface_1 = require("./http.interface"); let HttpFetchService = HttpFetchService_1 = class HttpFetchService { constructor(httpService, httpOption) { this.httpService = httpService; this.httpOption = httpOption; const { logger, requestInterceptors = [], responseInterceptors = [] } = this.httpOption; this.logger = logger || new common_1.Logger(HttpFetchService_1.name); requestInterceptors.forEach(({ onFulfilled, onRejected }) => { this.httpService.axiosRef.interceptors.request.use(onFulfilled, onRejected); }); this.httpService.axiosRef.interceptors.response.use(response => response, error => { const { response = {}, config = {} } = error; this.logger.error(`Api request failed -> status: ${response.status}; url: ${config.url}; params: ${JSON.stringify(config.params || {})}; body: ${JSON.stringify(config.data || {})}; response: ${JSON.stringify(response.data)}`); throw error; }); responseInterceptors.forEach(({ onFulfilled, onRejected }) => { this.httpService.axiosRef.interceptors.response.use(onFulfilled, onRejected); }); } async request(url, config = {}) { config = config || {}; const protocol = this.httpOption.protocol || 'http'; if (url.indexOf(protocol) !== 0) { url = `${protocol}://${url}`; } switch (this.httpOption.parameterStyle) { case http_interface_1.ParameterStyle.CAMEL_TO_SNAKE: if (config.data) { config.data = http_helper_1.HttpHepler.humpToSnake(config.data); } if (config.params) { config.params = http_helper_1.HttpHepler.humpToSnake(config.params); } break; case http_interface_1.ParameterStyle.SNAKE_TO_CAMEL: if (config.data) { config.data = http_helper_1.HttpHepler.snakeToHump(config.data); } if (config.params) { config.params = http_helper_1.HttpHepler.snakeToHump(config.params); } break; default: break; } let response, resp; const stringParams = JSON.stringify(config.params || {}); const stringBody = JSON.stringify(config.data || {}); const start = new Date().getTime(); try { resp = await this.httpService.axiosRef.request(Object.assign({}, this.httpOption, config, { url })); url = resp.config.url; this.logger.log(`Api request -> (${new Date().getTime() - start}ms) url: ${url}; params: ${stringParams}; body: ${stringBody}`); const data = resp.data; let content = data.data; if (this.httpOption.parameterStyle === http_interface_1.ParameterStyle.CAMEL_TO_SNAKE) { content = http_helper_1.HttpHepler.snakeToHump(data.data || {}); } else if (this.httpOption.parameterStyle === http_interface_1.ParameterStyle.SNAKE_TO_CAMEL) { content = http_helper_1.HttpHepler.humpToSnake(data.data || {}); } response = { code: data.code || 0, msg: data.msg || '', data: content, success: data.code === 600, }; } catch (err) { this.logger.error(err.message); if (!err.response.data) { err.response.data = {}; } if (!err.response.data.code && !err.response.data.data) { throw new http_exception_1.HttpRequestApiException({ msg: err.message, }); } response = { code: err.response.data.code || 0, msg: err.response.data.msg || err.message, data: err.response.data.data, success: false, }; } return response; } async post(url, config) { return this.request(url, Object.assign({}, config, { method: 'post' })); } async get(url, config) { return this.request(url, Object.assign({}, config, { method: 'get' })); } async put(url, config) { return this.request(url, Object.assign({}, config, { method: 'put' })); } async delete(url, config) { return this.request(url, Object.assign({}, config, { method: 'delete' })); } async patch(url, config) { return this.request(url, Object.assign({}, config, { method: 'patch' })); } async head(url, config) { return this.request(url, Object.assign({}, config, { method: 'head' })); } }; HttpFetchService = HttpFetchService_1 = __decorate([ common_1.Injectable(), __param(0, common_1.Inject(common_1.HttpService)), __param(1, common_1.Inject(http_constants_1.HTTP_OPTION)), __metadata("design:paramtypes", [common_1.HttpService, Object]) ], HttpFetchService); exports.HttpFetchService = HttpFetchService; //# sourceMappingURL=http.service.js.map