需要一些有关结构问题的建议

时间:2019-08-15 14:07:03

标签: loopbackjs loopback4

我和我的团队将开发一些将与其他应用程序通信的应用程序,该应用程序的基本工作原理如下: 使用React构建的前端应用程序可与API通信。该API的工作方式是:我们每个客户都有一个单独的数据库,他们的用户将访问我们的前端应用程序,此应用程序将位于一个数据库中,该数据库包含有关其企业的信息,并将返回他们的一些连接信息。此后,每个用户将获得有关其企业的信息,我们的API将获取此信息并连接到数据库中并获取数据。我的问题是我不知道执行此操作的最佳方法(在企业x的用户连接后||后实例化每个请求中的数据源并断开连接后,当该企业中的活动用户||时,我将打开此连接)。其他解决方案)?我在这种情况下尝试使用lb4是错误的?

1 个答案:

答案 0 :(得分:0)

My situation is similar to yours, my team is using `Mongodb` 4.x and I assume you are using it.

问题

据我了解,您的麻烦是

  • 您需要在不同的请求中动态使用不同的DataSource
  • 实例化后,当前DataSource地址不变。

使用Mongodb

的解决方案

您需要创建一个扩展了juggler.DataSource的类,该类可以每次动态切换数据库,然后将inject的类扩展到每个controller中。

  • loopback-datasource-juggler / types / datasource.d.ts

export declare class DataSource extends EventEmitter {

  ...

  connector?: Connector; // <= can access `Mongodb Client` object

  • 创建类以juggler.DataSource扩展

export class MyClient extends juggler.DataSource {

    constructor(
        @config()
        settings: Config = config
    ) {
        super(settings);
    }

    public async db(dbName: string): Promise<Database> {
        if (!this.connected) await this.connect();
        // return the `Mongodb DB` object
        return this.connector!.client.db(dbName);
    }

}

  • 注入MyClient类并在控制器中使用

export class TestController {

    constructor(
        @inject('my-client')
        private myClient: MyClient,
    ) { }

    @post('/test')
    async test(){
        let db = await this.myClient.db('db-name');
        let col = db.collection('col-name');
        // ...
    }

}