This library takes a querystring and turns it into something you can give to Sequelize.
yarn add qs-to-sequelize
or
npm install -g qs-to-sequelize
const queryLib = require('../lib/query')();
const User = require('../models/user');
const router = new Router();
router
.get('', async (req, res) => {
const query = queryLib(req.query);
res.json(await User.findAll(query));
})
You can pass the following options:
{
max_per_page: 20,
default_per_page: 10,
}
Like so:
const queryLib = require('../lib/query')({max_per_page: 20});
Opts are new as of version 2.x.x
The querystring params you can pass are:
The number of results you want to receive.
?per_page=10
-> { limit: 10 }
The page you are interested in.
?page=2&per_page=10
-> { offset: 10, limit: 10 }
The property you want the results sorted by
?sort=quantity
-> { order: ['quantity', 'ASC'] }
The property you want the results sorted by in descending order
?sort=-quantity
-> { order: ['quantity', 'DESC'] }
A property you want to filter by
NB: Express parses filter[key]
into {filter: key}
and that's what we expect
?filter%5Bfoo%5D=bar ->
{ where: { foo: 'bar' } }`
Many properties you want to filter by
?filter%5Bfoo%5D=bar&filter%5Bbaz%5D=quux ->
{ where: { foo: 'bar', baz: 'quux' } }`
Only return documents updated since this time
updated_since=2016-12-19T05%3A34%3A15.518Z
-> { where: { updated_at: { $gt: '2016-12-19T05:34:15.518Z' } } }
Only return documents updated before this time
updated_before=2016-12-19T05%3A34%3A15.518Z
-> { where: { updated_at: { $lt: '2016-12-19T05:34:15.518Z' } } }
Only return documents created since this time
created_since=2016-12-19T05%3A34%3A15.518Z
-> { where: { created_at: { $gt: '2016-12-19T05:34:15.518Z' } } }
Only return documents created before this time
created_before=2016-12-19T05%3A34%3A15.518Z
-> { where: { created_at: { $lt: '2016-12-19T05:34:15.518Z' } } }
If the library doesn't like something it's passed, it will throw
an error back at you.
Use something that handles errors for you like:
https://www.npmjs.com/package/express-async-errors
or
https://www.npmjs.com/package/express-yields
or
Wrap calls in a try
.
Development of this library was funded by Ordermentum