Simple, powerful, minimalist package to turn your Node.js with Sequelize RESTful APIs into Graph APIs.
// Pass `db` connection object which has `Sequelize.Op`
const queryParser = require("sequelize-query")(db);
getUsers = async req => {
// Parse your API query
let query = await queryParser.parse(req);
// Pass to Sequelize model find...() functions
return User.findAndCountAll(query);
};
- Request specific set of fields instead of fetching all the table columns
// fields=field01,field02...
// E.g: Get only id, name and email
?fields=id,name,email
- GET collection request APIs pagination support by default (without you writing code for that)
?offset=0&limit=10
// NOTE: Max page size limit is set to 200
- GET collection request APIs sorting and groupping by default.
Sorting
// Sort by id in ascending order
?sort_by=id.asc
// Sort by name in descending order
?sort_by=name.desc
Grouping
// Group by id
?group_by=id
- Simple filter query operations on the request objects
// Query format is
// filedName=unaryOperator:value
// Get all entries where firstName is like Reza or Rezaul, etc
?firstName=like:Reza%
// Get all entries where id is greater than 2 and lastName is like Reza%
?firstName=like:Reza%&id=gt:1
- Querying with sequelize JSON format
// Find where firstname is Twaha and id is 1 or firstName is Riajul and id is 2
?query={"or": [{"and": [{"firstName": "Twaha"}, {"id": 1}]}, {"and": [{"firstName": "Riajul"}, {"id": 2}]}]}
// NOTE: query maps your query object to `where=queryObj`
- Fetch and Query on relational objects (tables)
// Get only those whose role is 'admin'
?include={"model": "UserRole", "as": "userRole", "include" : {"model": "Role", "as" : "role", "required": 1, "where": {"name": "admin"} }}
Just use sequelize format query in the API requests
substituting Sequelize operators with below keys.
gt: Op.gt, // gt (greater than) for Op.gt
gte: Op.gte,
lt: Op.lt,
lte: Op.lte,
ne: Op.ne,
eq: Op.eq,
not: Op.not,
like: Op.like, // LIKE '%hat'
notLike: Op.notLike, // NOT LIKE '%hat'
regexp: Op.regexp, // REGEXP/~ '^[h|a|t]' (MySQL/PG only)
notRegexp: Op.notRegexp, // NOT REGEXP/!~ '^[h|a|t]' (MySQL/PG only)
and: Op.and, // AND (a = 5)
or: Op.or, // (a = 5 OR a = 6)
between: Op.between, // BETWEEN 6 AND 10
notBetween: Op.notBetween, // NOT BETWEEN 11 AND 15
in: Op.in, // IN [1, 2]
notIn: Op.notIn, // NOT IN [1, 2]
npm i sequelize-query
I really appreciate your help in any case.
Fixes, Improvements, Enhancements, Documentation.
To contribute, please create a pull request to develop
branch.