所以我可以说我GET
有/movies
路线(实际上不是电影,但这样解释会更容易)
在客户端,我有一个表,我想根据下拉菜单过滤电影:
流派,年份,国家,类型(默认情况下,它们都在ALL
)
这些也是movies
表的db上的列。我正在使用node-postgres
所以我的查询是这样的:
const query = {
text: 'SELECT * FROM movies WHERE genre = $1 AND year = $2 AND country = $3 AND type = $4',
values: [genre, year, country, type],
};
但如果用户不从下拉列表中选择任何内容(ALL
)
最好的方法是什么,如果客户端发送ALL
它只是不将该列添加到查询中?
答案 0 :(得分:1)
我认为你别无选择,你应该只在适用时才提出你的条件......
例如:
const params = {
genre: null,
year: 2015,
country: null,
type: 'western',
};
const query = {
text: 'SELECT * FROM movies',
values: Object.values(params).filter(x => x),
};
if (Object.values(params).filter(x => x).length) {
query.text += ' WHERE '
let i = 1;
for (const param of Object.keys(params).filter(x => params[x])) {
query.text += `${param} = $${i} AND `
i++;
}
query.text = query.text.substr(0, query.text.length - 5);
}
console.log(query); // {"text":"SELECT * FROM movies WHERE year = $1 AND type = $2","values":[2015,"western"]}
希望它有所帮助。