hapi-query-filter

5.0.0 • Public • Published

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

Readme

Keywords

Package Sidebar

Install

npm i hapi-query-filter

Weekly Downloads

213

Version

5.0.0

License

MIT

Unpacked Size

15.3 kB

Total Files

11

Last publish

Collaborators

  • jayteelob
  • erik.forsman-lob
  • jkleung11
  • tanya.sah
  • hunteryoakum
  • rdimouro7373
  • lobstertroy
  • joshnkoy
  • michel_lob
  • haroutrs
  • kjones_lob
  • eamon-barisone
  • nathanielwaldschmidtlob
  • zach.reed
  • richpodrazalob
  • kencrim
  • jorgelob
  • nick-place-lob
  • andrew.guterres
  • ajorczak
  • hanqingchen-lob
  • juan.frissdekereki
  • mmorgan-lob
  • karankwatra-lob
  • joey-bates-lob
  • luke.birdeau
  • mg-lob
  • vmangwani
  • sachinlob
  • nick.perri
  • siddharthpant92
  • bethqiang
  • kplob
  • samkitsheth95
  • erin-doyle
  • jfdavidson
  • meussdorffer
  • shannamurry
  • amaan_lob
  • team.platform.lob.com
  • elijah-lob
  • jlowsley-lob
  • barnabygo
  • james.cho
  • douglaje
  • lob-owner
  • graeme.lowe.lob