我正在评估我们公司正在建立的新平台的环回。我建立了一个测试项目,尽管学习曲线,我绝对喜欢环回框架。一个我似乎搞不懂的交易破坏者是如何根据请求动态连接到数据库,基于请求数据的用户和客户。
我们的遗留系统在每个客户和每个客户位置上都有一个数据库(一个有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/