@bakjs/sequelize
hapi.js plugin for the Sequelize ORM
Last updated 2 years ago by pi0 .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @bakjs/sequelize 
SYNC missed versions from official npm registry.

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:

Current Tags

  • 2.1.0                                ...           latest (2 years ago)

3 Versions

  • 2.1.0                                ...           2 years ago
  • 2.0.1                                ...           3 years ago
  • 2.0.0                                ...           3 years ago
Maintainers (2)
Downloads
Today 0
This Week 0
This Month 1
Last Day 0
Last Week 1
Last Month 7
Dependencies (3)
Dev Dependencies (12)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |