基于用户环回的动态数据库连接

时间:2017-03-05 17:05:41

标签: mysql node.js loopbackjs

我正在为我们公司正在建设的新平台评估Loopback。我设置了一个测试项目,尽管有学习曲线,但我非常喜欢Loopback框架。我无法弄清楚的一个交易破坏者是如何根据请求数据的用户和客户动态连接到数据库。 我们的遗留系统每个客户都有一个数据库,每个客户位置(有3个位置的客户总共有4个数据库),并且没有计划很快迁移数据结构。这意味着在发出请求时,我们需要连接到该客户数据库,获取数据,然后断开连接 任何Loopback人都知道这是否可行?

1 个答案:

答案 0 :(得分:2)

考虑一下datasources.json

"db1": {
    "name": "db1",
    "host": "localhost",
    "database": "customers_one_db",
    "password": "",
    "user": "",
    "connector": "mysql"
  },
"db2": {
    "name": "db2",
    "host": "localhost",
    "database": "customers_two_db",
    "password": "",
    "user": "",
    "connector": "mysql"
  }

创建这样的中间件:

//middlewares.json
"inital:after": {
 ...
 "./middlewares/dsChanger": {}
 ...
}

//middlewares/dsChanger.js
var app = require('../server');
module.exports = function(options) {
  return function(req, res, next) {
    if(req.headers.customerType === 'blah'){
      app.models.Customer.attachTo(app.datasources.db2);
    }else {
      app.models.Customer.attachTo(app.datasources.db1);
    }
    next();
  }
}

免责声明:我没有在

之前尝试过这个

<强>更新

要在代码中创建数据源,您可以这样做:

var DataSource = require('loopback-datasource-juggler').DataSource;
var mysqlConnector = require('loopback-connector-mysql');

var ds1 = new DataSource(mysqlConnector, {
  host: 'localhost',
  database: 'customers_one_db',
  username: '',
  password: ''
});

并且不要忘记创建另一个middlware并将其作为最后的中间件阶段,放到disconnect数据源中。

ds1.disconnect(function(err, result){});