koa-mongo-router
Version:
KOA REST API Router for MongoDB
54 lines (53 loc) • 2.02 kB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.koaProxy = void 0;
/* istanbul ignore file */
const http = require("http");
const https = require("https");
const node_server_utils_1 = require("node-server-utils");
const url_1 = require("url");
function koaProxy(ctx, sourceUrl, headers) {
let request = http.request;
if (sourceUrl.startsWith('https')) {
request = https.request;
}
const requestOptions = url_1.parse(sourceUrl);
requestOptions.method = ctx.method;
const _a = ctx.headers, { host } = _a, ctxHeaders = __rest(_a, ["host"]); // remove host from ctx.headers
requestOptions.headers = ctxHeaders;
if (headers != undefined) {
requestOptions.headers = Object.assign(Object.assign({}, requestOptions.headers), headers);
}
return new Promise((resolve, reject) => {
try {
ctx.req.pipe(request(sourceUrl, requestOptions, (res) => {
for (const header in res.headers) {
if (res.headers.hasOwnProperty(header)) {
ctx.set(header, res.headers[header]);
}
}
ctx.status = res.statusCode;
ctx.body = res;
resolve();
}));
}
catch (err) {
node_server_utils_1.logger.error({
message: 'proxy get route error',
error: err.message,
});
reject(err);
}
});
}
exports.koaProxy = koaProxy;