запрос sequelize findAll с использованием нескольких ограничений, где аргумент - PullRequest
0 голосов
/ 07 апреля 2020

Новое для продолжения здесь!

ищет способ использовать 2 аргумента из res.query.

без запроса. Запрос работает нормально.

жестко закодированы все работы OK.

только с телефоном также работает OK.

Любой способ использовать их одновременно (делать И или ИЛИ) между ними?

или ... . любой способ проверить все var в res.query и применить их по мере необходимости!?

regards

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);
    });
};

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Я думаю, что я решил ситуацию

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);
    });
};

, в этом случае я мог бы использовать подобные

http://mydomain/api/users?phone=351XXXXXXXXX // любое число или часть

http://mydomain/api/users?active=true&last=24 // активный пользователь вошел в систему за последние 24 часа

и здесь файл json для справки

{
    "userLstMsg": "2020-04-08T05:48:49.910Z",
    "userId": "U.k8qwwlmh",
    "userPhone": "351123456789",
    "userName": "my user",
    "userActive": true
}
0 голосов
/ 07 апреля 2020

Вы можете поместить несколько условий в качестве объекта для значения where.

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