node.js - 如果没有传递查询字符串,Sequelize 如何获取所有数据
问题描述
我对 Sequelize 很陌生。
我正在尝试创建一个处理程序来获取数据库中的所有播放列表。
这就是我想要做的:
- 如果有查询字符串,那么它应该根据该查询返回结果。
- 如果没有传递查询字符串,那么它应该返回我所有的播放列表。
这是我的播放列表模型:
const Playlist = db.define("playlist", {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
},
name: {
type: Sequelize.STRING,
unique: true,
},
});
这是我的处理程序:
exports.getPlaylists = async (req, res) => {
try {
const { name } = req.query;
console.log(name); // this prints the name
const result = await Playlist.findAll({
where: {
name:
name === undefined ? {} : { $like: `%${name}%` },
},
});
if (result) {
res.status(200).send(result);
} else {
response.status(404).send("No Playlists found");
}
} catch (error) {
res.status(500).send(`Internal server error: ${error}`);
}
};
如果我在查询中传递了一个名称,这很有效。但如果我没有传递任何查询字符串。它返回一个空数组。
$like
是一个别名Sequelize.Op.like
我应该放什么而不是空对象?
我检查了这个问题How get all data if field in query string is empty Node and Sequelize with Postgres但建议的解决方案不适用于我
解决方案
根据条件创建过滤器对象。如果您将空对象传递给 where,它将不会在查询中应用它。
exports.getPlaylists = async (req, res) => {
try {
const { name } = req.query;
const filters = {};
if (name)
filters.name = {
[Op.like]: `${name}%`, // you can also use $like if you are using older version of sequelize
}
const result = await Playlist.findAll({
where: filters,
});
if (result) {
res.status(200).send(result);
} else {
response.status(404).send("No Playlists found");
}
} catch (error) {
res.status(500).send(`Internal server error: ${error}`);
}
};
这样,您可以根据其他查询字符串准备复杂的过滤器。
推荐阅读
- java - 如何在 postgresql 中存储 Arraylist 数据
- git - 如何从本地克隆恢复已删除的分叉存储库?
- roblox - Gui 对所有玩家开放,但我在 LocalScript 中编写了脚本
- powershell - PowerShell 脚本中的布尔参数值
- reactjs - Gatsby 动态路由 404 构建
- javascript - 调用函数之间的区别
或 React 中的 <>{TestFunc()} - c++ - 在优先级队列中调试 Setkey 函数时遇到问题
- ruby-on-rails - 使用基于 current_user 的条件路径切换用户 Gem config.redirect
- bash - 如何在bash中转义转义字符?
- kubernetes - Minikube IP 无法在浏览器上访问