所以我需要构建一个可以将 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/