首页 > 解决方案 > 在 Express.js 中使用 Sequelize 查询端点参数的组合

问题描述

使用 Express.js 中的 Sequelize ORM 查询 mySQL 数据库。

在 Express.js 中,我有一个端点,它接受两个参数“级别”和“主题”,就像这样,

//Get Topic
router.get("/tasks/:level&:topic", (req, res) => {
  Task.findAll({
      where: {
        Topic: req.params.topic,
        Level: req.params.level
      }
    })
    .then(tasks => {
      res.json(tasks)
    })
    .catch(err => {
      res.send("error: " + err)
    })
})

当我想查询“级别 AND 主题”时,这很有效。

但有时“级别”可能为空,我只想查询“主题”,而有时“主题”可能为空,我只想查询“级别”。

我想在这个端点中有很多参数,而不仅仅是这里的两个,并且能够查询这些参数的任意组合。

我想如果这是不可能的,我将不得不为每个参数组合创建一个端点。有没有更简单的方法来做到这一点?

任何帮助将不胜感激。

谢谢,

标签: mysqlexpresssequelize.js

解决方案


我迟到了两年。但是最近几天我遇到了同样的问题,我认为我解决它的方式可以帮助其他人。Sequelize 中有一个运算符,称为[Op.or]. 在这些情况下:

//Get Topic
router.get('/tasks', (req, res) => {
    Task.findAll({
        where: {
            [Op.or]: {
                Topic: req.query.topic,  // /tasks?topic=topic
                Level: req.query.level   // /tasks?level=level
            }
        }
    })
    .then(tasks => {
        res.json(tasks)
    })
    .catch(err => {
        res.send("error: " + err)
    })
})

也许考虑[Op.like]匹配查询:

//Get Topic
router.get('/tasks', (req, res) => {
    Task.findAll({
        where: {
            [Op.or]: {
                Topic: { [Op.like]: '%' + req.query.topic + '%' },  
                Level: { [Op.like]: '%' + req.query.level + '%' }   
            }
        }
    })
    .then(tasks => {
        res.json(tasks)
    })
    .catch(err => {
        res.send("error: " + err)
    })
})

推荐阅读