我正在评估我们公司正在建立的新平台的环回。我建立了一个测试项目,尽管学习曲线,我绝对喜欢环回框架。一个我似乎搞不懂的交易破坏者是如何根据请求动态连接到数据库,基于请求数据的用户和客户。
我们的遗留系统在每个客户和每个客户位置上都有一个数据库(一个有3个位置的客户总共有4个数据库),而且不打算很快迁移数据结构。这意味着当发出请求时,我们需要连接到客户数据库,获取数据,然后断开连接。
有人知道这是否可能吗?

最佳答案

考虑到您在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){});

关于mysql - 环回中基于用户的动态数据库连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42611310/

10-13 08:53
查看更多