gpt4 book ai didi

node.js - 如果没有传递查询字符串,Sequelize 如何获取所有数据

转载 作者:行者123 更新时间:2023-12-03 22:19:25 26 4
gpt4 key购买 nike

我对 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}`);
    }
    };
    如果我在查询中传递了一个名称,这很有效。但是如果我没有传递任何查询字符串。它返回一个空数组。 $likeSequelize.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}`);
    }
    };
    通过这种方式,您可以根据其他查询字符串准备复杂的过滤器。

    关于node.js - 如果没有传递查询字符串,Sequelize 如何获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62941312/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com