我有200多个服务网址。网址格式如下:
serviceURL = DomainName + MethodName + Path;
DomainName& MethodNames是可配置的,路径可能类似于以下格式:
Path = 'A' + '/' + Param1 + '/' + 'B' + '/' + Param2 + '/' + 'C' + '/'+ Param3;
我的要求是创建一个通用方法,我可以使用参数传递单个URL,并且该URL应相应地设置serviceURL。例如。
Var URL = 'domain1/method1/A/{0}/B/{1}/C/{2}';
GenericMethod(URL, Param1, Param2, Param3){
//in URL domain1 should get replaced by DomainName
// method1 should get replaced by MethodName
//path URL {0} {1} {2} get replaced by params
}
有没有人遇到任何这样的要求/需要?
欢迎提出建议。
由于
答案 0 :(得分:0)
我不确定我是否理解你的问题,但如果我这样做了,那么你可以做这样的事情。
function getPath(URL, Param1, Param2, Param3){
return URL.replace('{0}', Param1).replace('{1}', Param2).replace('{2}', Param3);
}
$http.get(getPath(URL, Param1, Param2, Param3));
最好使用执行此操作的方法创建服务。
答案 1 :(得分:0)
你可以使用arguments
变量(在每个JS函数中都可用)和一点Regex来实现:
function getServiceRequestURL(serviceURL) {
var requestURL = serviceURL;
for(var i = 1; i <= arguments.length; i++) {
requestURL = requestURL.replace(new RegExp('\\{' + (i-1) + '\\}', 'gi'), arguments[i]);
}
return requestURL
}
这样做是让所有参数都超过serviceURL
并将{0}
标记替换为传递给函数的实际参数。无论给定的参数数量如何,这都适用于任何规模的服务URL。
答案 2 :(得分:0)
最简单的方法是使用正则表达式:
SELECT SUM(cost) as cost
FROM cartItems c JOIN
(SELECT 1 as itemNumber UNION ALL
SELECT 1 UNION ALL
SELECT 2
) i
ON i.itemNumber = c.itemNumber;
或者通过向GenericMethod({domain:&#39; myDomain&#39;,param1:&#39; myParam1&#39;})提供参数哈希而不是列表来更加通用,然后迭代键
但是,这样的方法会在其他独立服务之间添加隐式依赖关系,并且将来某些新服务可能需要不同的URL方案,因此在大型应用程序中,URL方案通常不会超出常规范围以防止额外的耦合。 / p>