Easily transform an Express req.query into TypeORM query
Contributing
·
License
This library allows you to transfrom automatically Express.js req.query into TypeORM findOptions queries.
npm install typeorm-express-query-builder
Use QueryBuilder export from package and pass your req.query
as an argument:
import QueryBuilder from 'typeorm-express-query-builder';
const builder = new QueryBuilder(req.query);
const builtQuery = builder.build();
// Now your query is built, pass it to your TypeORM repository
const results = await fooRepository.find(builtQuery);
Given the following url query string:
foo/?name__contains=foo&role__in=admin,common&age__gte=18&page=3&limit=10
It will be transformed into:
{
where: {
foo: Like('%foo%'),
role: In(['admin', 'common']),
age: MoreThanOrEqual(18)
},
skip: 20,
take: 10
}
GET foo/?name__contains=foo&role__in=admin,common&age__gte=18&page=3&limit=10
POST foo/?name__contains=foo&role__in=admin,common&age__gte=18&page=3&limit=10
app.get('/foo', (req, res) => {
const queryBuilder = new QueryBuilder(req.query); // => Parsed into req.query
const built = queryBuilder.build();
})
POST foo/, body: {
"name__contains": "foo",
"role__in": "admin,common",
"age__gte": 18,
"page": 3,
"limit": 10
}
app.post('/foo', (req, res) => {
const queryBuilder = new QueryBuilder(req.body); // => Parsed into req.body
const built = queryBuilder.build();
})
Lookup | Behaviour | Example |
---|---|---|
(none) | Return entries that match with value | foo=raul |
contains | Return entries that contains value | foo__contains=lopez |
startswith | Return entries that starts with value | foo__startswith=r |
endswith | Return entries that ends with value | foo__endswith=dev |
isnull | Return entries with null value | foo__isnull |
lt | Return entries with value less than or equal to provided | foo__lt=18 |
lte | Return entries with value less than provided | foo__lte=18 |
gt | Returns entries with value greater than provided | foo__gt=18 |
gte | Return entries with value greater than or equal to provided | foo__gte=18 |
in | Return entries that match with values in list | foo__in=admin,common |
between | Return entries in range | foo__between=1,27 |
Notice: you can use negative logic prefixing lookup with __not
.
Example:
foo__not__contains=value
Option | Default | Behaviour | Example |
---|---|---|---|
page | 1 | Return entries for page page |
page=2 |
limit | 25 | Return entries for page page paginated by size limit |
limit=15 |
order | - | Order for fields:+ : Ascendant - : Descendant |
order=+foo,-name,+surname |