52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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
 | |
| }
 |