【发布时间】:2016-06-17 05:16:17
【问题描述】:
我正在处理的函数是获取一个具有 7 个不同键值的输入对象,每个键值都可以是未定义的或未定义的。我想根据输入中存在的那些键值过滤我的数据库。例如,如果只有input.userID 存在,我想运行这个查询:
db.query("...WHERE userID = ${userID}", {userID: input.userID});
如果 input.userID 和 input.startTime 都存在,我想这样做:
db.query("...WHERE userID = ${userID} and startTime= ${startTime}", {userID: input.userID, startTime: input.startTime});
我所做的是我创建了一个这样的参数和键对象:
if(input.userID) {
keys.push('userID');
params.push(input.userID);
query = addFilterToTheQuery(query, 'userID', input.userID, filteredItemsCount);
filteredItemsCount = filteredItemsCount +1;
}
addFilterToTheQuery 是我自己实现的一个简单函数。我基本上做了 7 个 if 案例。然后我必须使用这些键和参数值以可能需要另一个巨大的 switch case 代码的方式传递给查询函数。
这是唯一的方法吗?有没有更好的方法来消除这段代码中的冗余?
【问题讨论】:
-
1.像
%value%这样的语法只能用于LIKE2。您不能将params[1]作为第三个参数传递给方法query- see it in the API。
标签: javascript node.js postgresql pg-promise