Sequelize Search Builder
About
This is a lightweight library to convert search request (e.g. HTTP) to Sequelize ORM query.
Installation
npm install --save sequelize-search-builder
Usage
Example based on Express framework.
Direct generation of where/order/limit/offset query
const router = models = searchBuilder = ; router;
Full query generation example (getFullQuery method)
res;
You can set HTTP query string as second parameter for Seach Builder constructor (it will parse by 'qs' library to object).
Request Examples
Equal:
// HTTP:?filtername=John&filtersurname=Smith// req.query: filter: name: 'John' surname: 'Smith' // getWhereQuery() name: 'John' surname: 'Smith'
Equal (OR):
// HTTP:?filtername=John&filtersurname=Smith&filter_condition=or// req.query: filter: name: 'John' surname: 'Smith' _condition: 'or' // getWhereQuery() Symbolor: name: 'John' surname: 'Smith'
Conditions:
// HTTP:filteragegt=100&filteragelt=10&filterage_condition=or&filternameiLike=%john%&filter_condition=or// req.query filter: age: gt: 100 lt: 10 _condition: 'or' name: iLike: '%john%' _condition: 'or' // getWhereQuery() SequelizeOpor: SequelizeOpor: age: SequelizeOpgt: 100 age: SequelizeOplt: 10 name: SequelizeOplike: '%john%'
If _condition parameter is absent - "and" will be use by default
Order:
// HTTP:?filtername=desc// req.query: order: name: 'desc' // getOrderQuery() 'name' 'desc'
You can find more examples in the tests of the project (test/index.js)
Git repository with DB tests: https://github.com/segemun/sequelize-search-builder-db-tests
Allowed query conditions
Request Option | Sequelize Symbol | Description |
---|---|---|
eq (=) | = (no Symbol) | Equal |
gt | Sequelize.Op.gt | Greater than |
gte | Sequelize.Op.gte | Greater than or equal |
lt | Sequelize.Op.lt | Less than |
lte | Sequelize.Op.lte | Less than or equal |
ne | Sequelize.Op.ne | Not equal |
between | Sequelize.Op.between | Between [value1, value2] |
notBetween | Sequelize.Op.notBetween | Not Between [value1, value2] |
in | Sequelize.Op.in | In value list [value1, value2, ...] |
notIn | Sequelize.Op.notIn | Not in value list [value1, value2, ...] |
like | Sequelize.Op.like | Like search (%value, value%, %value%) |
notLike | Sequelize.Op.notLike | Not like search (%value, value%, %value%) |
iLike | Sequelize.Op.iLike | case insensitive LIKE (PG only) |
notILike | Sequelize.Op.notILike | case insensitive NOT LIKE (PG only) |
regexp | Sequelize.Op.regexp | Regexp (MySQL and PG only) |
notRegexp | Sequelize.Op.notRegexp | Not Regexp (MySQL and PG only) |
iRegexp | Sequelize.Op.iRegexp | iRegexp (case insensitive) (PG only) |
notIRegexp | Sequelize.Op.notIRegexp | notIRegexp (case insensitive) (PG only) |
Configuration
You can redefine configuration variables in rc file
Just create .sequelize-search-builderrc file in root folder of your project
Or use setter for 'config' parameter (setConfig)
RC file example:
"logging": false "fields": "filter" : "filter" "order" : "order" "limit" : "limit" "offset" : "offset" "default-limit": 10
Setter example:
modelsSequelize reqquery ;
Contribute
You are Welcome =) Keep in mind:
npm run test