Sequelize:根据请求在运行时连接到数据库

我正在做一个node.js应用程序,我需要连接到多个数据库。 其中一个数据库是中央数据库,其中包含所有人共同的信息。 然后有根据国家储存数据的国家级数据库。

我在应用程序中使用续集ORM。
数据库是postgresql。
框架是明确的。

问题是我想根据请求使用哪个数据库来决定运行时间,模型应该自动连接到适当的数据库。 我已经看到这个问题,但没有发现它有帮助。

我也检查了另一个论坛,但没有发现任何东西。

你需要创build对应于每个数据库的对象,并且在每个这个对象上你需要实例化Sequelize。 此外,对于每个后续实例,您需要导入模型(假设所有这些数据库具有完全相同的表格和模型表示forms)。

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]); // here you need to access the models path, maybe with fs module // iterate over every model and import it into every country sequelize instance // let's assume that models' paths are in simple array 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; }); // now every country?DB object has it's own sequelize instance and all model definitions inside export { country1DB, country2DB, country3DB }; 

这只是一些示例代码,它需要重构是有用的(引入一些循环等)。 它应该告诉你如何在单个应用程序中使用多个数据库的想法。 如果你想在某个地方使用country1数据库,你可以简单的做

 import { country1DB } from './databases'; country1DB.User.findAll({...}); 

上面的代码将在先前指定的country1数据库中执行SELECT * FROM usersexpress路线示例如下所示:

 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()); }); }); 

或者,甚至更好的是,你可以编写一些middleware函数,在每个请求之前运行,并且负责为进一步的操作select合适的数据库。