1.0.0 • Published 4 years ago

hapi-query-qs v1.0.0

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

Hapi Query String qs

Build Status NPM version Downloads

The purpose of this plugin isparse the query parameters into a object that is accessible via request.queryqs.

the onjetive is to allow 'brackets' '[]' in the querystring an permit the quind of query string parsed by the qs package:

// GET /search?q=tobi+ferret console.dir(req.query.q) // => 'tobi ferret'

// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse console.dir(req.query.order) // => 'desc'

console.dir(req.query.shoe.color) // => 'blue'

console.dir(req.query.shoe.type) // => 'converse'

// GET /shoes?color[]=blue&color[]=black&color[]=red console.dir(req.query.color) // => 'blue', 'black', 'red'

Registering the Plugin

var Hapi = require('@hapi/hapi');
var server = new Hapi.Server();

server.register([
  {
    register: require('hapi-query-qs'),
    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
    }
  }
], function (err) {
  // An error will be available here if anything goes wrong
});

Ignoring Keys

You can ignore keys to have them stay at the root level of request.query. A configuration of:

var Hapi = require('@hapi/hapi');
var server = new Hapi.Server();

server.register([
  {
    register: require('hapi-query-qs'),
    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
    }
  }
], function (err) {
  // An error will be available here if anything goes wrong
});

Will cause a request like /shoes?order=desc&shoe[color]=blue&shoe[type]=converse to create a request.queryqs that looks like:

{
  order: 'desc',
  
  shoe: {
    color: 'blue',
    type: 'converse'
  }
}

Enabling at the Route Level

If defaultEnabled: false you will need to enable the plugin an a per-route basis by doing the following:

var Hapi = require('@hapi/hapi');
var server = new Hapi.Server();

server.register([
  {
    register: require('hapi-query-qs')
  }
], function (err) {
  // An error will be available here if anything goes wrong
});

server.route({
  method: 'GET',
  path: '/test',
  handler: function (request, reply) { ... },
  config: {
      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
      }
    }
  }
})
1.0.0

4 years ago

0.0.1

4 years ago