All Projects → koajs → Json Filter

koajs / Json Filter

Middleware allowing the client to filter the response to only what they need, reducing the amount of traffic over the wire.

Programming Languages

javascript
184084 projects - #8 most used programming language

koa-json-filter

Middleware allowing the client to filter the response to only what they need, reducing the amount of traffic over the wire using the ?filter=foo,bar,baz querystring parameter.

JSONSelect would also be great for this but I find it's a little too complicated for the average use-case, so this is just a simple key filter.

Installation

$ npm install @koa/json-filter

Please note that if you're using an earlier version of koa 2 with function generator you need to install the older version 0.0.1

$ npm install [email protected]

Options

  • name querystring param defaulting to "filter"

Filtering customization

You may also set ctx.filter to an array of names to filter on, for example by using a header field X-Filter: name,email.

Example

Object responses

Script:

const Koa = require('koa');
const filter = require('@koa/json-filter');

const app = new Koa();

app.use(filter());

app.use(async ctx => {
  ctx.body = {
    name: 'tobi',
    email: '[email protected]',
    packages: 5,
    friends: ['abby', 'loki', 'jane']
  };
});

app.listen(3000);
console.log('app listening on port 3000');

Response:

$ GET /?filter=name
{
  "name": "tobi"
}

Array responses

Script:

const Koa = require('koa');
const filter = require('@koa/json-filter');

const app = new Koa();

app.use(filter());

app.use(async ctx => {
  ctx.body = [
    {
      name: 'tobi',
      email: '[email protected]',
      packages: 5,
      friends: ['abby', 'loki', 'jane']
    },
    {
      name: 'loki',
      email: '[email protected]',
      packages: 2,
      friends: ['loki', 'jane']
    },
    {
      name: 'jane',
      email: '[email protected]',
      packages: 2,
      friends: []
    },
    {
      name: 'ewald',
      email: '[email protected]',
      packages: 2,
      friends: ['tobi']
    }
  ];
});

app.listen(3000);
console.log('app listening on port 3000');

Response:

$ GET /?filter=name,email
[
  {
    "name": "tobi",
    "email": "[email protected]"
  },
  {
    "name": "loki",
    "email": "[email protected]"
  },
  {
    "name": "jane",
    "email": "[email protected]"
  },
  {
    "name": "ewald",
    "email": "[email protected]"
  }
]

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].