router.js 1.0 KB

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