UNPKG

1.47 kBJavaScriptView Raw
1var _ = require('lodash');
2var logger = require('./logger.js').getInstance();
3
4module.exports = {
5 createProxyOptions: createProxyOptions
6};
7
8function createProxyOptions(req, config) {
9 var proxyTable = config.proxyTable;
10 var result = _.clone(config);
11
12 if (proxyTable) {
13 var newTarget = getTargetFromProxyTable(req, proxyTable);
14 if (newTarget) {
15 logger.debug('[HPM] proxyTable new target: %s -> "%s"', config.target, newTarget);
16 result = _.assign(result, {target: newTarget}); // override option.target
17 }
18 }
19
20 return result;
21}
22
23function getTargetFromProxyTable(req, proxyTable) {
24 var result;
25 var host = req.headers.host;
26 var path = req.url;
27
28 var hostAndPath = host + path;
29
30 _.forIn(proxyTable, function(value, key) {
31 if (containsPath(key)) {
32
33 if (hostAndPath.indexOf(key) > -1) { // match 'localhost:3000/api'
34 result = proxyTable[key];
35 logger.debug('[HPM] proxyTable match: %s -> "%s"', hostAndPath, result);
36 return false;
37 }
38 } else {
39
40 if (key === host) { // match 'localhost:3000'
41 result = proxyTable[key];
42 logger.debug('[HPM] proxyTable match: %s -> "%s"', host, result);
43 return false;
44 }
45
46 }
47
48 });
49
50 return result;
51}
52
53function containsPath(v) {
54 return v.indexOf('/') > -1;
55}