我有两个数据库,分别连接到两个不同的后端应用程序服务器。两台服务器都与一个 Web 应用程序通信。现在,可以简单地更改 UI 上的 url 参数来选择要与哪个服务通信,即,如果您设置 serverUrl='abc'
, 它会指向 server A
与 database A
, 如果你设置 serverUrl='cde'
, 它会指向 server B
与 database B
.我在前端进行了工作流测试,这两种服务基本上都是通用的。但是db A
中的字段名称和 db B
是不同的。即,如果我在 db A
中有一个名为“webid”的字段名称,相同的字段名称在 Webid
中称为“db B
”同样,code
中有更多类似“db A
”的内容是 CODE
中的“db B
” .因此,我没有重复我的测试,而是简单地创建了一个函数,我只是根据 serverUrl 检查它是否为 db A
。 , 返回 "code"否则返回 "CODE
", 以此类推数据库中的所有字段名称。因此,在我的测试中,不是简单地使用普通的 fieldname
创建查询, 我传入 checkField("code")
它根据条件 (serverUrl
) 返回一个字符串并执行查询。
函数如下:
function checkField(str: string) : string {
let server = serverUrl === 'abc' ? true : false;
switch (args[0].toLowerCase()) {
case 'code':
return serverUrl ? 'code' : 'CODE';
case 'webid':
return serverUrl ? 'webid' : 'Webid';
case 'pkid':
return serverUrl ? 'pkid' : 'PkId';
case 'barcode':
return serverUrl ? 'barcode' : 'Barcode';
case 'price':
return serverUrl ? 'price' : 'Price';
case 'bestbefore':
return serverUrl ? 'bestbefore' : 'BestBefore';
case 'produce':
return serverUrl ? 'produce' : 'Produce';
case 'sales':
return serverUrl ? 'sales' : 'Sales';
case 'marketid':
return serverUrl ? "marketid" : "MarketId";
case 'regdate':
return serverUrl ? "regdate" : "Regdate"; //and more fields
default:
return args[0];
}
所以,我想知道是否有更优雅的方式来进行这种比较。无论如何,我们可以在这里使用静态代码分析器吗?[我不太确定它们是什么]任何见解或指示都会很棒。 非常感谢。
最佳答案
洞察力是,当 serverUrl
为真时,您根本不需要 switch
- 您总是返回与打开时相同的值。所以不要在每个 switch case
中都做测试,而是在这之前做一次:
function checkField(str: string) : string {
if (serverUrl === 'abc')
return str.toLowerCase();
else
switch (str.toLowerCase()) {
case 'code': return 'CODE';
case 'webid': return 'Webid';
case 'pkid': return 'PkId';
case 'barcode': return 'Barcode';
case 'price': return 'Price';
case 'bestbefore': return 'BestBefore';
case 'produce': return 'Produce';
case 'sales': return 'Sales';
case 'marketid': return "MarketId";
case 'regdate': return "Regdate";
//and more fields
default: return str;
}
}
除了switch
语句,您还可以使用对象字面量或Map
。作为查找表。
关于javascript - 如何根据参数以更高效更好的方式分析数据库表中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892330/