您需要创建与您的每个数据库对应的对象,并在每个对象中实例化Sequelize。进一步地,对于每个sequelize实例,您需要导入模型(假设所有这些数据库具有完全相同的表和模型表示)。
import Sequelize from 'sequelize';
let connectionsArray = [
'postgres://user:pass@example.com:5432/country1',
'postgres://user:pass@example.com:5432/country2',
'postgres://user:pass@example.com:5432/country3',
];
let country1DB, country2DB, country3DB;
country1DB = country2DB = country3DB = {};
country1DB.Sequelize = country2DB.Sequelize = country3DB.Sequelize = Sequelize;
country1DB.sequelize = new Sequelize(connectionsArray[0]);
country2DB.sequelize = new Sequelize(connectionsArray[1]);
country3DB.sequelize = new Sequelize(connectionsArray[2]);
models.forEach(modelFile => {
let model1DB = country1DB.sequelize.import(modelFile);
let model2DB = country2DB.sequelize.import(modelFile);
let model3DB = country3DB.sequelize.import(modelFile);
country1DB[model1DB.name] = model1DB;
country2DB[model2DB.name] = model2DB;
country3DB[model3DB.name] = model3DB;
});
export {
country1DB,
country2DB,
country3DB
};
以下是一些示例代码,需要进行重构以便于实际使用(如引入一些循环等)。它应该只是向您展示如何在单个应用程序中使用多个数据库的思路。如果您想在某处使用例如country1
数据库,您只需执行以下操作:
import { country1DB } from './databases';
country1DB.User.findAll({...});
上述代码将在之前指定的
country1
数据库中执行
SELECT * FROM users
。以下是一个示例
express
路由的样式:
import * as databases from './databases';
app.get('/:dbIndex/users', (req, res) => {
databases['country' + req.params.dbIndex + 'DB'].User.find().then(user => {
res.json(user.toJSON());
});
});
或者,更好的方法是编写一些中间件函数,在每个请求之前运行,并负责选择适当的数据库进行进一步操作。