1 |
|
2 | const request = require('request');
|
3 |
|
4 | const getOptions = (target, req) => {
|
5 | const options = {
|
6 | uri: target + req.url,
|
7 | methid: req.method,
|
8 | headers: {
|
9 | 'content-type': 'application/json',
|
10 | 'accept': req.headers['accept']
|
11 | },
|
12 | resolveWithFullResponse: true
|
13 | };
|
14 | switch(req.method.toLocaleLowerCase()) {
|
15 | case 'post':
|
16 | case 'put':
|
17 | options.json = true;
|
18 | options.body = req.body
|
19 | break;
|
20 | case 'get':
|
21 | if (Object.keys(req.query).length > 0) {
|
22 | options.uri = `${target}${req.url.split('?')[0]}`;
|
23 | options.qs = req.query;
|
24 | }
|
25 | break;
|
26 | }
|
27 | return options;
|
28 | };
|
29 |
|
30 | const requestAsync = (options) => {
|
31 | return new Promise((resolve, reject) => {
|
32 | request(options, (error, response, body) => {
|
33 | if (error) reject({ error: error, statusCode: response.statusCode });
|
34 | resolve({ error: error, statusCode: response.statusCode, body: body });
|
35 | });
|
36 | });
|
37 | };
|
38 |
|
39 | const proxyServer = (proxy, app) => {
|
40 | app.all(proxy.route, async (req, res, next) => {
|
41 | const response = await requestAsync(getOptions(proxy.target, req));
|
42 | if (response.error) return res.status(response.statusCode).send(response.error);
|
43 | return res.status(response.statusCode).send(response.body);
|
44 | });
|
45 | };
|
46 |
|
47 | module.exports = proxyServer; |
\ | No newline at end of file |