hapi-query-filter
v5.0.0
Published
Hapi Plugin to Convert Query Params to Filter Object
Maintainers
Keywords
Readme
Hapi Query Filter
The purpose of this plugin is to convert query parameters into a single filter object that is accessible via request.query.filter.
For example: ?first_name=John&last_name=Doe would create a request.query that looks like
{
filter: {
first_name: 'John',
last_name: 'Doe'
}
}Registering the Plugin
const hapi = require('@hapi/hapi');
const server = new hapi.Server({});
await server.register([
{
plugin: require('hapi-query-filter'),
options: {
ignoredKeys: ['count', 'offset'], // Array of query parameters not to convert to filter object
defaultEnabled: true // if true plugin will be used on all routes
}
}
]);Ignoring Keys
You can ignore keys to have them stay at the root level of request.query. A configuration of:
const hapi = require('@hapi/hapi');
const server = new hapi.Server({});
await server.register([
{
plugin: require('hapi-query-filter'),
options: {
ignoredKeys: ['count', 'offset'], // Array of query parameters not to convert to filter object
defaultEnabled: true // if true plugin will be used on all routes
}
}
]);Will cause a request like ?first_name=John&last_name=Doe&count=10&offset=0 to create a request.query that looks like:
{
count: 10,
offset: 0,
filter: {
first_name: 'John',
last_name: 'Doe'
}
}Enabling at the Route Level
If defaultEnabled: false you will need to enable the plugin an a per-route basis by doing the following:
const hapi = require('@hapi/hapi');
const server = new hapi.Server({});
await server.register([require('hapi-query-filter')]);
server.route({
method: 'GET',
path: '/test',
config: {
handler: async (request) => { ... },
plugins: {
queryFilter: {
enabled: true,
ignoredKey: ['count', 'offset'], // Array will be concatenated with the ignoredKeys set at register
params: ['test_param'] // Array of request.params that will be put into filter object
}
}
}
})