koa-web-kit
Version:
A modern, production-ready, and full-stack node web framework
40 lines (36 loc) • 1.07 kB
JavaScript
/**
* Request proxy for backend api
*/
const { PassThrough } = require('stream');
const Router = require('koa-router');
const { HttpClient } = require('../services/HttpClient');
exports.handleApiRequests = function(prefix, endPoint) {
const routerPrefix = prefix.endsWith('/') ? prefix : `${prefix}/`;
// TODO: a path rewrite?
const router = new Router({ prefix: routerPrefix });
const apiProxy = new HttpClient({ endPoint, prefix });
router.all('*', async ctx => {
const requestStream = apiProxy.proxyRequest(ctx);
const pt = requestStream.pipe(PassThrough());
try {
await new Promise((resolve, reject) => {
requestStream.on('response', response => {
ctx.status = response.statusCode;
ctx.set(response.headers);
resolve();
});
requestStream.on('error', error => {
reject(error);
});
});
} catch (err) {
ctx.status = 500;
ctx.body = {
code: err.code,
};
return;
}
ctx.body = pt;
});
return router.routes();
};