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