在Express.js中使用Sequelize查询端点参数的组合

时间:2019-08-14 17:53:21

标签: mysql express sequelize.js

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

在Express.js中,我有一个端点,它带有两个参数“ level”和“ topic”,就像这样,

//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主题”时,此方法很好用。

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

我希望在此终结点中有很多参数,而不仅仅是这里的两个参数,并且能够查询这些参数的任何组合。

我想象如果不可能的话,我将不得不为每种参数组合创建一个端点。有更简单的方法吗?

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

如果它的查询简单field= value,那么您可以使用下面的查询 在这种情况下

  

在以下情况下,您必须保持参数名称与数据库字段名称相同

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

其他选择是检查req.params并进行/创建where查询   根据您的需要

答案 1 :(得分:0)

我通过创建一个称为查询的对象来完成这项工作,该对象根据元素是否为空而添加了元素。

然后我将此对象用作查询中的“ where”条件,

//Get Query
router.get("/tasks/:level?/:topic?", (req, res) => {
  var query = {};
  if (req.params.topic != " ") {
    console.log("topic sent");
    query.Topic = req.params.topic;
  }
  if (req.params.level != " ") {
    console.log("level sent");
    query.Level = req.params.level;
  }
  console.log(query);
  Task.findAll({
      where: query
    })
    .then(tasks => {
      res.json(tasks)
    })
    .catch(err => {
      res.send("error: " + err)
    })
})

在Vue.js中,使用此方法发送参数,

getQuery(level, topic) {
      if (!topic) {
        topic = " ";
      }
      if (!level) {
        level = " ";
      }
      axios.get("/api/tasks/" + level + "/" + topic + "/").then(
        // axios.put('/api/task/' + id, {
        result => {
          console.log(result.data)
          this.todos = result.data
        },
        error => {
          console.error(error)
        }
      )
    },

这将使我能够处理来自端点的参数的任何组合。]

“?”在我在此帖子https://stackoverflow.com/a/41736911/4001324中找到的网址中,该网址允许参数为可选。尽管它们总是在此处传递,但如果为空则为空格。