JSPM

  • Created
  • Published
  • Downloads 531
  • Score
    100M100P100Q85916F
  • License MIT

Hapi plugin for converting a Joi response schema and dataset to csv

Package Exports

  • hapi-csv

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (hapi-csv) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Hapi-csv Build Status

What

Converts the response to csv based on the Joi response schema when the Accept header includes text/csv or application/csv or the requested route ends with .csv

How

npm install hapi-csv

Register the hapi-csv plugin on the server

server.register({
    register: require('hapi-csv'),
    options: {
        maximumElementsInArray: 5,
        separator: ','
    }
}, function (err) {

    if (err) throw err;
    ...
});

When you have a route on which a response schema is defined, like in the example below, the plugin will convert the response to csv when the Accept header includes text/csv or application/csv or the requested route ends with .csv

const routes = [{
    method: 'GET',
    path: '/users',
    handler: Users.getAll,
    config: {
        response: {
            schema: Joi.object().keys({
                first_name: Joi.string(),
                last_name: Joi.string(),
                age: Joi.number()
            })
        }
    }
}]

Either do GET /users with header Accept: text/csv or Accept: application/csv. Or do GET /users.csv. The header approach is prefered.

Currently the content-disposition header is set to attachment; by default since this plugin is intended for exporting purposes, if this hinders you just let us know.

To handle typical pagination responses like

{
    "page": 1,
    "items": [
        { "name": "Anton", "age": 22 },
        { "name": "Lisa", "age": 25 }
    ]
}

pass in the resultKey option:

server.register({
    register: require('hapi-csv'),
    options: {
        resultKey: 'items'
    }
}, function (err) {

    if (err) throw err;
    ...
});