router.js 1.2 KB

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