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

哈迪逊

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

Zhikai Xiong
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');
        // ...
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章