【问题标题】:Change database connection depending on route in express.js with sequelize使用 sequelize 根据 express.js 中的路由更改数据库连接
【发布时间】:2015-07-23 23:41:33
【问题描述】:

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

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

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

bar 站点使用单独的数据库,因此如果他们想为bar 获取所有任务,他们必须转到example.com/bar/tasks

每个安装都有自己的数据库,并且所有数据库都具有相同的架构。

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

*只登录一次

【问题讨论】:

    标签: javascript node.js express sequelize.js


    【解决方案1】:

    这是可能的。有很多方法可以做到这一点。以下是我可能会采用的方法。

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

    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,
    }
    

    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.
     }
    

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

    我希望这会有所帮助!

    【讨论】:

    • 这种动态方式怎么做?例如,您在 connection.js 中对两个数据库进行硬编码?如果有 1000 个数据库动态到来,你如何处理?
    • 考虑博客系统 *.blog.dev 和子域是数据库名称,你需要多少连接?
    • 我也有同样的烦恼
    【解决方案2】:

    我认为最好根据路线更改集合。 在同一个数据库中有foo_tasks 集合和bar_tasks 集合。

    或者在tasks 集合中使用属性type 来指定任务是“foo 任务”还是“bar 任务”。

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 2019-12-01
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多