Kareem Abdelwahed
Kareem Abdelwahed

Reputation: 186

Sequelize how to get all data if there is no query string passed

I'm pretty new to Sequelize.

I'm trying to create a handler to get all playlists in my database.

This is what I want to do:

This is my playlist model:

const Playlist = db.define("playlist", {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true,
  },
  name: {
    type: Sequelize.STRING,
    unique: true,
  },
});

Here is my handler:

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}`);
  }
};

This works well if I passed a name in the query. but If I didn't pass any query string. It returns an empty array.

$like is an alias for Sequelize.Op.like

What should I put instead of the empty object?

I checked this question How get all data if field in query string is empty Node and Sequelize with Postgres but the proposed solutions didn't work with me

Upvotes: 2

Views: 2254

Answers (1)

Sujeet
Sujeet

Reputation: 3810

Create a filter object based on the condition. If you pass empty object to where, it won't apply that in the query.

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}`);
  }
};

This way you can prepare complex filters based on other query strings.

Upvotes: 2

Related Questions