@bakjs/sequelize
v2.1.0
Published
hapi.js plugin for the Sequelize ORM
Downloads
18
Readme
hapi-sequelize
Hapi.js plugin for the Sequelize ORM.
Compatibility
Compatible with hapi.js version 17.x
and sequelize 4.x
.
Installation
npm install --save @bakjs/sequelize
Configuration
Simply pass in your sequelize instance and a few basic options and voila. Options accepts a single object or an array for multiple dbs.
server.register([
{
register: require('@bakjs/sequelize'),
options: [
{
// identifier
name: 'dbname',
// paths/globs to model files
models: ['./server/models/**/*.js'],
// sequelize: new Sequelize(/* ... */), // sequelize instance
// or connection string
connection: 'sqlite:dbname.db',
// or connection options
// connection: {
// dialect: '',
// username: '',
// password: ''
// },
// sync models - default false
sync: true,
// force sync (drops tables) - default false
forceSync: false,
},
],
},
]);
Model Definitions
A model should export a function that returns a Sequelize model definition (http://docs.sequelizejs.com/en/latest/docs/models-definition/).
module.exports = function(sequelize, DataTypes) {
const Category = sequelize.define('Category', {
name: DataTypes.STRING,
rootCategory: DataTypes.BOOLEAN,
});
return Category;
};
Setting Model associations
Using the sequelize model instance, define a method called associate
, that is a function, and receives as parameter all models defined.
module.exports = function(sequelize, DataTypes) {
const Category = sequelize.define('Category', {
name: DataTypes.STRING,
rootCategory: DataTypes.BOOLEAN,
});
Category.associate = function(models) {
models.Category.hasMany(models.Product);
};
return Category;
};
Database Instances
Each registration adds a DB instance to the server.plugins['sequelize']
object with the
name option as the key.
function DB(sequelize, models) {
this.sequelize = sequelize;
this.models = models;
}
// smth like this
server.plugins['sequelize'][opts.name] = new DB(opts.sequelize, models);
API
getDb(name)
The request object gets decorated with the method getDb
. This allows you to easily grab a
DB instance in a route handler. If you have multiple registrations pass the name of the one
you would like returned or else the single or first registration will be returned.
handler(request, reply) {
const db1 = request.getDb('db1');
console.log(db1.sequelize);
console.log(db1.models);
}
db.getModel('User')
Returns single model that matches the passed argument or null if the model doesn't exist.
db.getModels()
Returns all models on the db instance
License
MIT
Based on: