5.0.0 • Published 1 year ago

hapi-query-filter v5.0.0

Weekly downloads
12
License
MIT
Repository
github
Last release
1 year ago

Hapi Query Filter

Build Status Coverage Status NPM version Downloads

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
      }
    }
  }
})
5.0.0

1 year ago

4.0.0

2 years ago

3.1.0

3 years ago

3.0.0

3 years ago

2.0.0

5 years ago

1.0.1

9 years ago