【发布时间】:2019-04-20 14:39:46
【问题描述】:
我正在尝试构建一个支持、列出、搜索和过滤器的 API。我不确定在哪里放置 where 子句。
它在某些情况下有效,但在很多情况下都无效。例如,当输入正文有搜索文件时,它会起作用,但是当你只应用第二个过滤器时,pan 在这种情况下它没有。
const query = {
text: `
select master.contact.id,
master.contact.name
from
master.contact
`
};
if (input.search) {
query.text += ` where
(master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
}
if (input.filters) {
const {
isActive,
pan
} = input.filters;
if (isActive !== undefined) {
query.text += ` where master.contact.isActive = ${isActive}`;
}
if (pan) {
query.text += `and master.contact.pan = ${pan}`;
}
【问题讨论】:
-
您可能会尝试寻找现有的 ORM,而不是尝试自己有条件地构建 sql 语句。典型的模式是你可以根据你的条件建立一个“数据结构”,然后这个库的工作就是将该“数据结构”转换为发送到服务器的实际 SQL 语句。简而言之,人们已经发明了一些东西来做到这一点,所以自己再次发明它没有什么意义。
-
谷歌搜索; google.com/search?q=node+js+orm+postgres 并研究结果。
-
@NeilLunn:这是一个老项目,现阶段引入 ORM 需要花费大量的精力和时间。我别无选择我必须这样完成它
标签: sql node.js postgresql