问题描述
我正在开发一个试用的Node.JS服务器,该服务器使用Sequelize ORM与Postgres数据库进行交互。
我有一张答案表,其中有些已经确认,但有些没有(“ 已确认”是“ 答案”表中的一列)。
如果普通用户要求我发送确认的答案,否则我将发送所有答案;我使用称为 isAdmin 的查询参数来识别常规用户(如果isAdmin为0,则它是常规用户)。
那么如何在Sequelize的where子句中使用 isAdmin 参数?
我的最佳尝试如下:
const isAdmin = req.params.isadmin
try{
const result = await AnswersModel.Answer.findAll({
where:
sequelize.or(
sequelize.and(
{confirmed: true},isAdmin == false
),sequelize.and(
1==1,isAdmin == true
)
)
}catch(error){
...
}
我没有收到任何错误,但是isAdmin条件简单地无效:(!
注意:我知道我可以使用“行查询”或简单的if(){}else{}
样式来做到这一点,但我只是想避免这种情况
解决方法
请勿尝试将所有条件过滤器构建逻辑包含到where
选项中。它必须尽可能简单。
const where = {}
if (!isAdmin) {
where.confirmed = true
}
const result = await AnswersModel.Answer.findAll({
where
})