我有一个应用程序,我有不同的客户,比方说: 客户_1, 客户_2
我得到了sequlize配置
const Sequelize = require('sequelize');
const Op = Sequelize.Op;
const fs = require('fs');
const path = require('path');
const db = {};
let sequelize = new Sequelize('db_schema', 'user', 'password', {
dialect: 'mysql',
host: '127.0.0.1',
port: '3306',
dialectOptions: {
supportBigNumbers: true,
bigNumberStrings: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
logging: console.log
});
sequelize.authenticate()
.then(() => {
console.log('Database connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
fs.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".")!==0) && (file !== "index.js");
})
.forEach(function(file) {
let model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
每个客户都会有自己的 db_schema,所以我需要将每个客户与其架构连接起来,
如何实现?
我试图在互联网上查找,但找不到解决方案。
您将需要某种具有标识符的单例模式数据库池,例如在此示例代码中:
class DynamicDB {
constructor(database) {
// all config, models, etc...
this.instance = {};
}
// generates unique identifier for your instance
static getDatabaseUniqueIdentifier(database) {
return JSON.stringify(database).toString('base64');
}
/**
* get instance of the database
* @returns {DynamicDB}
* @throws {Error} if instance is not initialized
*/
static getInstance(database = {}) {
!this.instance && (this.instance = {});
const _id = DynamicDB.getDatabaseUniqueIdentifier(database);
if (!this.instance[_id]) {
this.instance[_id] = new DynamicDB(database || {});
}
return this.instance[_id];
}
/**
* Close database connection and delete instance from memory
* Use only if necessary
* @returns {void}
* @throws {Error} if instance is not initialized
*/
static closeDatabase(database) {
const _id = DynamicDB.getDatabaseUniqueIdentifier(database);
this.instance[_id] && this.instance[_id].connection.close();
this.instance[_id] = null;
}
}
module.exports = DynamicDB;