/
sequelize.js
39 lines (33 loc) · 1.24 KB
/
sequelize.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const { readdirSync } = require('fs');
const { basename: _basename, join } = require('path');
const Sequelize = require('sequelize');
const { createNamespace } = require('continuation-local-storage');
const { log } = require('./utils');
module.exports = {
/**
* create sequelize db
* @param {string} clsName CLS namespace name
* @param {string} dbUri dialect://username:password(at)host:port/database
*/
create: (clsName, dbUri) => {
const sequelizeNS = createNamespace(`sequel-cls-${clsName}`);
Sequelize.useCLS(sequelizeNS);
const sequelize = new Sequelize(dbUri, { logging: log });
const basename = _basename(__filename);
const files = readdirSync(__dirname)
.filter(file => (file.indexOf('.') > 0) && (file !== basename) && (file !== 'config.js'));
const db = {};
for (const file of files) {
const model = sequelize.const(join(__dirname, file));
db[model.name] = model;
}
for (const modelName of Object.keys(db)) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
}
db.sequelize = sequelize;
db.Sequelize = Sequelize;
return db;
}
};