jFranciscov
jFranciscov

Reputation: 73

sequelize dynamic query params

I'm sending query params as JSON format in req.query.p from my front-end MVC framework , the point is that this could be a dynamic key and value, for example:

req.query.p = {nombre : 'juan'}

or

req.query.p = {pais : 'chile'}

So I need the key, and the value to put them in the where statement, something like this

exports.select = function(req, res){
    console.log('=> GET | Obtener peliculas'.bold.get);
        db.Pelicula
            .findAndCountAll({
                limit : req.query.limit,
                offset : req.query.offset,
                where : req.query.p ? [req.query.p.KEY + " = ?", req.query.p.VAL] : null
            })
            .success(function(resp){
                console.log(JSON.stringify(resp.rows, null, 4).bold.get);
                res.json({peliculas : resp.rows, meta : { total : resp.count}});
            });
}

Upvotes: 5

Views: 13827

Answers (3)

Roman Nazarevych
Roman Nazarevych

Reputation: 7703

With ES6 and with usage of the dynamic properties I'll do it like this

const { Op } = require("sequelize");

const from = new Date()
// const to = new Date().setMinutes(40)
const to = null

let where = {
    timestamp: {
        [Op.or]: {}
    }
}

if (from) {
    where.timestamp[Op.or][Op.gte] = new Date(from)
}
if (to) {
    where.timestamp[Op.or][Op.lte] = new Date(to)
}
console.log(where);

Model.find({ where })

Upvotes: 0

Usually I put the entire object, so if it comes empty, it will work normally as if there is no conditional WHERE. You don't need to add {} in the where, because the object that comes from req.query already has it.

const filter = req.query;
example= await ModelExample.findAndCountAll({
               where:
                filter
})

Upvotes: 0

Jan Aagaard Meier
Jan Aagaard Meier

Reputation: 28798

The where parameter can be an object, so you can just pass where: req.query.p

Upvotes: 7

Related Questions