UNPKG

@dazejs/framework

Version:

Daze.js - A powerful web framework for Node.js

113 lines 4.19 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpProxy = void 0; const http_proxy_1 = require("http-proxy"); const querystring_1 = __importDefault(require("querystring")); const fs_1 = __importDefault(require("fs")); const form_data_1 = __importDefault(require("form-data")); const helpers_1 = require("../../helpers"); class HttpProxy { constructor(option) { this.option = { changeOrigin: true, secure: false }; if (option) this.option = option; this._server = (0, http_proxy_1.createProxyServer)(); } on(event, listener) { this._server.on(event, listener); return this; } once(event, listener) { this._server.once(event, listener); return this; } getServer() { return this._server; } changeOrigin(flag = true) { this.option.changeOrigin = flag; return this; } ws(flag = true) { this.option.ws = flag; return this; } secure(flag = true) { this.option.ws = flag; return this; } target(target) { this.option.target = target; return this; } rewrite(fn) { this.rewriteFn = fn; return this; } headers(headers) { this.option.headers = Object.assign(Object.assign({}, this.option.headers), headers); return this; } output(request) { var _a, _b; if (typeof this.rewriteFn === 'function') { let formatUrl = (_a = request.url) !== null && _a !== void 0 ? _a : ''; formatUrl = formatUrl.replace((0, helpers_1.config)().get('app.baseUrl', ''), ''); request.url = (_b = this.rewriteFn(formatUrl)) !== null && _b !== void 0 ? _b : formatUrl; } this._server.on('proxyReq', (proxyReq, req) => { const requestBody = req.body; const contentType = proxyReq.getHeader('Content-Type'); if (requestBody) { const writeBody = (bodyData) => { proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData)); proxyReq.write(bodyData); }; if (contentType && ~contentType.indexOf('application/json')) { writeBody(JSON.stringify(requestBody)); } else if (contentType && ~contentType.indexOf('application/x-www-form-urlencoded')) { writeBody(querystring_1.default.stringify(requestBody)); } else if (contentType && ~contentType.indexOf('multipart/form-data')) { const files = req.files; const fd = new form_data_1.default(); for (const key of Object.keys(files)) { fd.append(key, fs_1.default.readFileSync(files[key].path), { filename: files[key].name, contentType: files[key].contentType }); } for (const key of Object.keys(requestBody)) { fd.append(key, requestBody[key]); } for (const key of Object.keys(fd.getHeaders())) { proxyReq.setHeader(key, fd.getHeaders()[key]); } const buf = fd.getBuffer(); proxyReq.setHeader('Content-Length', Buffer.byteLength(buf)); proxyReq.write(buf); } else { writeBody(JSON.stringify(requestBody)); } } }); return new Promise((resolve, reject) => { this._server.on('end', () => { resolve(); }); this._server.web(request.getReq(), request.getRes(), this.option, (err) => { reject(err); }); }); } } exports.HttpProxy = HttpProxy; //# sourceMappingURL=proxy.js.map