mysql - 在 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 主题”时,这很有效。
但有时“级别”可能为空,我只想查询“主题”,而有时“主题”可能为空,我只想查询“级别”。
我想在这个端点中有很多参数,而不仅仅是这里的两个,并且能够查询这些参数的任意组合。
我想如果这是不可能的,我将不得不为每个参数组合创建一个端点。有没有更简单的方法来做到这一点?
任何帮助将不胜感激。
谢谢,
解决方案
我迟到了两年。但是最近几天我遇到了同样的问题,我认为我解决它的方式可以帮助其他人。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)
})
})
推荐阅读
- python - 我如何解决 np.loadtxt 的问题
- javascript - 获取首先做出反应的用户 discord.js
- puppeteer - 如何解决 Puppeteer:无法启动浏览器进程
- python - 按字谜排序以在 Python 中列出
- html - 无法让此颜色框留在其他框内并向右浮动
- python - (Discord.py) 如何检查机器人是否已经在语音通道中播放音频?
- python - 如何在 Python 中使用 tesseract 获得图像中最大的文本?
- javascript - 即使选中了一个,我也会收到单选按钮的输出值
- python - PMTA:带有 Gmail API 的 SMTP 中继服务器
- javascript - 为什么表单没有在 Ajax 调用上提交