| 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 | 
| } |