Javascript 对象路由映射

标签 javascript node.js object

所以我需要构建一个可以将 URL 路径映射到目标服务器的对象,如下所示:

/api         :   http://apiserver:8000
/api/v1      :   http://apiv1server:8888
/api/v1/foo  :   http://foo:8080
/foo         :   http://foo:8080

function addRoute(path, server) {
  setRoute(path, server)
}
addRoute('/api', 'http://apiserver:8000')
addRoute('/api/v1', 'http://apiv1server:8888')

每次查找都应该匹配最具体的路由,所以我最初的想法是这样一个对象:

 let map = {
   api: {
     v1: {
       default: 'http://apiv1server:8000',
       foo: 'http://foo:8080'
     },
     default: 'http://apiserver:8000'
   },
   foo: 'http://foo:8080'
 }

这样你就可以像这样使用一个简单的查找函数:

function lookup(path) {
  let result = null
  path.split('/').forEach(key => {
    result = map[key] || map[key].default
  })
  return result
}

但是尝试通过点(斜杠)表示法设置对象已被证明非常困难,有什么想法吗?

或者还有其他更简单的方法吗?

最佳答案

function lookup(path){
   let arr = path.split("/").splice(1);
   let m = {...map};
   arr.forEach((e)=>{
      m = m[e] || m.default;
   })
  return typeof(m) === "object" ? m.default : m;
}

你可以试试这个。

关于Javascript 对象路由映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49186453/

相关文章:

javascript - React onClick 无法启动计时器

javascript - 如何同步确定 JavaScript Promise 的状态?

javascript - 将鼠标悬停在同一类 div 集中的单个 div 上时显示叠加层

node.js - NodeJS 和 AWS Lambda 的异步等待问题

JavaScript - 函数作为对象

javascript - 如何知道哪些数据必须通过ajax发送具体问题

javascript - 似乎无法推送和返回一组对象 sequelize 查询

node.js - 如何使用jade页面显示数据库中的名称

apache-flex - 在 as3 中获取对象值的最快方法

python - 此代码是否重复对象或引用它?