You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							51 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							51 lines
						
					
					
						
							1.0 KiB
						
					
					
				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 | 
						|
}
 | 
						|
 |