我正在 loopback3 中开发一个项目,我需要为多家公司创建帐户,每个公司都有自己的数据库,我完全知道 loopback3 文档有一个部分解释如何以编程方式创建数据源以及如何创建来自该数据源的模型,我用它来创建以下代码,该代码在请求中接收一个我称为 dbname 的参数,这个参数更改了与所需数据源的链接。
用户诊所.js
Userclinic.observe('before save', async (ctx, next) => {
const dbname = ctx.instance.dbname; // database selection
const dbfound = await Userclinic.app.models.Clinics.findOne({where:{dbname}}) // checking if that database really exist in out registred clients databases
if( dbfound ){ // if database found
await connectToDatasource(dbname, Userclinic) // link the model to that database
} else { // otherwise
next(new Error('cancelled...')) // cancel the save
}
})
utils.js(我从哪里导出我的 connectToDatasource 方法)
const connectToDatasource = (dbname, Model) => {
console.log("welcome");
var DataSource = require('loopback-datasource-juggler').DataSource;
var dataSource = new DataSource({
connector: require('loopback-connector-mongodb'),
host: 'localhost',
port: 27017,
database: dbname
});
Model.attachTo(dataSource);
}
module.exports = {
connectToDatasource
}
所以我的问题是数据源实际上正在发生变化,但保存发生在先前选择的数据源中(这意味着它将实例保存到旧数据库中)并且在我再次发送请求之前不会保存到新数据库中。因此,更改数据源需要两个请求,并且它还将实例保存在两个数据库中。
我想当请求发生时,在允许对该模型执行任何操作之前,首先会检查与该模型相关的数据源,我真的需要在今晚之前完成这项工作,我希望有人能帮忙。
PS:如果有人对此有解决方案或知道如何使用环回 3 以任何方式将多个客户端(用户)关联到多个数据库(当然以编程方式),我会全神贯注(眼睛)。
提前致谢。