hapi-bookshelf-serializer

6.1.0 • Public • Published

Hapi Bookshelf Serializer

npm version

This plugin takes Bookshelf.js models that are returned via Hapi's reply method and serializes them using a user-defined serialize method.

Registering the Plugin

const Hapi = require('@hapi/hapi');

const server = new Hapi.Server();

await server.register([
  require('hapi-bookshelf-serializer'),
]);

Defining Models

Models are defined just like all Bookshelf.js models, except for one small addition. A serialize function is added with the following signature function (request) { }. All model properties can be accessed in the serialize function via this.get() and the function will be passed the current Hapi request as request. The serialize function can either return a static value or a Promise.

Serializing Related Models

Currently there is no support in this module for automatically serializing all related models so you will need to call the function manually.

Example

// models/role.js
const bookshelf = require('bookshelf')(require('knex')(config));

module.exports = bookshelf.Model.extend({
  tableName: 'roles',
  serialize: function(request) {
    return {
      this.get('id'),
      this.get('name')
    };
  }
});

// models/user.js
const bookshelf = require('bookshelf')(require('knex')(config));
const Role      = require('./role.js');

module.exports = bookshelf.Model.extend({
  tableName: 'users',
  roles: this.belongsToMany(Role),
  serialize: function (request) {
    return {
      this.get('id'),
      this.get('email'),
      roles: this.related('roles').map(function (role) {
        return role.serialize(request);
      });
    };
  }
});

This plugin pairs well with the hapi-bookshelf-models plugin which makes registering models from a directory super easy.

/hapi-bookshelf-serializer/

    Package Sidebar

    Install

    npm i hapi-bookshelf-serializer

    Weekly Downloads

    200

    Version

    6.1.0

    License

    MIT

    Unpacked Size

    15 kB

    Total Files

    12

    Last publish

    Collaborators

    • shannamurry
    • siddharthpant92
    • lob-owner
    • barnabygo
    • elijah-lob
    • team.platform.lob.com
    • amaan_lob
    • samkitsheth95
    • kplob
    • sachinlob
    • vmangwani
    • nathanielwaldschmidtlob
    • eamon-barisone
    • andrew.guterres
    • mmorgan-lob
    • mananshah78424
    • vikita.bhandari
    • lobstertroy
    • joshnkoy
    • hunteryoakum
    • erik.forsman-lob
    • joemeers82
    • jarrod-lob
    • matthew.burke
    • kjones_lob
    • rromit.lob
    • tanya.sah
    • jayteelob
    • zach.reed
    • hpelletier
    • philthelobster
    • benjaminkitt
    • graeme.lowe.lob