sequelize-connect
Formerly sequelize-singleton.
sequelize-connect is a simple singleton wrapper for the sequelize ORM, making it easier to configure and build models with Sequelize.
Configuring sequelize-connect
NOTE: sequelize-connect
must be configured upon app initialization, prior to accessing your models
The sequelize-connect connect()
method accepts the same parameters as the Sequelize() object database, username, password, options
.
var Connection = require('sequelize-connect');
var orm = new Connection(
'test-db',
'test-user',
'secret1234',
{
dialect: "mysql",
port: 3306
}
)
.then(function(instance){
});
It is important to configure the discover
array of the set of paths where your models should be discovered.
var Connection = require('sequelize-connect');
var discover = [__dirname + '/models', ...];
var orm = new Connection(
'test-db',
'test-user',
'secret1234',
{
dialect: "mysql",
port: 3306
},
discover,
)
.then(function(instance){
});
Upon the first initialization of the Connection
e.g. new Connection(...);
sequelize-connect will ASYNCHRONOUSLY recurse through all of the subfolders located at the provided file paths looking for any files with the naming default convention *.model.js
. Connect will return a Promise that is called on it's completion.
Connection String
You can use a connection string to connect as well:
new Connection(
'MyConnectionString',
{
dialect: "mysql",
port: 3306
})
.then(function(){
});
Custom matcher
If you prefer to define your own naming convention instead of the default you can create a custom matching function which receives the file name as the parameter returns a boolean
indicating if sequelize-connect should attempt to load the file as a model.
This function should be injected to Connection
like so:
var matcher = function(file){
if(
return true;
return false;
};
new Connection(
'test-db',
'test-user',
'secret1234',
{
dialect: "mysql",
port: 3306
},
discover,
matcher
)
Accessing sequelize
After connecting you can access the sequelize instance and models wherever you need!
var Connection = require('sequelize-connect');
var orm = new Connection();
var sequelize = orm.sequelize;
var Sequelize = orm.Sequelize;
var models = orm.models;
var User = models.User;
If you prefer, rather than waiting for the connection to load before initializing every part of your application, you can wrap the code that has dependencies on your models in a then
. e.g.
new Connection(
'MyConnectionString',
{
dialect: "mysql",
port: 3306
})
var Promise = require('bluebird');
var Connection = require('sequelize-connect');
var orm = new Connection();
var Promise.resolve(orm)
.then(function(instance) {
var User = instance.models.Foo;
var index = function(req, res) {
Foo.bar()
};
})
Defining Models
Models are defined as per the suggestion the article here: http://sequelizejs.com/articles/express. All associations are done via the class method associate
which is injected with the models object.
"use strict";
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("User", {
username: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
User.hasMany(models.Task)
}
}
});
return User;
};
Logging
Logging is optional, but is turned off by default. In order to enable logging, simply inject the logger of your choice:
myLogger = console;
new Connection(
'test-db',
'test-user',
'secret1234',
{
dialect: "mysql",
port: 3306
},
discover,
matcher,
myLogger
)
Your logger must comply with the following interface:
logger.log(level, message);
Contributing
Please read the contributing guidlines