根据具有sequelize的express.js中的路由更改数据库连接

zes*_*sk8 2 javascript node.js express sequelize.js

是否可以sequelize根据路由更改数据库连接?

例如,用户可以访问网站中的两个不同的安装: - example.com/foo -example.com/bar

登录后,用户被重定向到example.com/foo 要获取该foo站点的所有任务,他们需要访问example.com/foo/tasks

bar站点使用一个单独的数据库,因此如果他们想要获得bar他们必须去的所有任务example.com/bar/tasks

每个安装都有自己的数据库,并且所有数据库都具有相同的模式.

是否可以根据访问的路由更改数据库连接?

*登录只发生一次

Bre*_*nan 5

这个有可能.有很多方法可以做到这一点.这是我如何处理它.

Router.js

var router = express.Router()
// This assumes the database is always the 2nd param, 
// otherwise you have to enumerate
router.use('/:database/*', function(req, res, next){
  req.db = req.params.database;
  next();
} 
Run Code Online (Sandbox Code Playgroud)

Connection.js

var fooDB = new Sequelize('postgres://user:pass@example.com:5432/foo');
var barDB = new Sequelize('postgres://user:pass@example.com:5432/bar');
module.exports = {
  foo: fooDB,
  bar: barDB,
}
Run Code Online (Sandbox Code Playgroud)

Tasks.js

 var connection = require('connection);
 function getTasks(req, params){
   var database = connection[req.db]; 
   //database now contains the db you wish to access based on the route.
 }
Run Code Online (Sandbox Code Playgroud)

也就是说,当你想在两者之间复制模式时,你将不得不面对一些有趣的问题,但这可能是另一个问题的最佳选择.

我希望这有帮助!

  • 如何做到这种动态方式?例如,您正在硬编码connection.js中的两个数据库?如果有1000个数据库动态处理,您将如何处理? (6认同)