hapi-bookshelf-serializer
v6.1.0
Published
Hapi Plugin to Serialize Bookshelf Models in Hapi Response
Downloads
3,400
Maintainers
Readme
Hapi Bookshelf Serializer
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.