Javascript 在where arg中使用多个约束对查询findAll进行续集

Javascript 在where arg中使用多个约束对查询findAll进行续集,javascript,express,sequelize.js,Javascript,Express,Sequelize.js,新的续集在这里 正在寻找使用res.query中的2个参数的方法 没有任何请求。查询工作正常 硬编码所有工作正常 只有手机也可以正常工作 有没有办法同时使用这两种方法(在它们之间进行AND或or) 或者。。。。有没有办法检查res.query中的所有变量并根据需要应用它们 问候 exports.findAll = (req, res, next) => { const { phone, active } = req.query; // phone(string), active(bo

新的续集在这里

正在寻找使用res.query中的2个参数的方法

没有任何请求。查询工作正常

硬编码所有工作正常

只有手机也可以正常工作

有没有办法同时使用这两种方法(在它们之间进行AND或or)

或者。。。。有没有办法检查res.query中的所有变量并根据需要应用它们

问候

exports.findAll = (req, res, next) => {
  const { phone, active } = req.query;  // phone(string), active(boolean)

  let condPhone = phone ? { userPhone: { [Op.like]: `%${phone}%` } } : null;
  let condActive = active ? { userActive: Boolean(active) } : null;

  Saloia.Users.findAll({ where: condActive })
    .then((data) => res.send(data))
    .catch((err) => {
      err.status = 500;
      next(err);
    });
};

您可以将多个条件作为
where
值的对象

Saloia.Users.findAll({
  where: {
      foo: bar,
      foo2: bar2
    }
});

我想我解决了这个问题

exports.findAll = (req, res, next) => {

  const { phone, active, last } = req.query;
  let options = { where: {} };

  // string
  phone ? (options.where.userPhone = { [Op.like]: `%${phone}%` }) : null;
  // boolean
  active ? (options.where.userActive = tmp = active === "true") : null;
  // date/time
  last ? (options.where.userLstMsg = {[Op.gt]: moment().subtract(last, 'hours').toDate()}) : null; 

  Saloia.Users.findAll(options)
    .then((data) => res.send(data))
    .catch((err) => {
      err.status = 500;
      next(err);
    });
};
在这种情况下,我可以用这些

//任何数字或部分

//最近24小时内登录的活动用户

这里是json文件供参考

{
    "userLstMsg": "2020-04-08T05:48:49.910Z",
    "userId": "U.k8qwwlmh",
    "userPhone": "351123456789",
    "userName": "my user",
    "userActive": true
}

是的,文字效果很好!在where body中调用函数怎么样?