需要一些关于结构问题的建议
Need some advice about a structure problem
我和我的团队将开发一些可以与其他人通信的应用程序,这个应用程序基本上是这样工作的:
用 React 构建的前端应用程序,可与 API 通信。这个 API 的工作方式是:我们的每个客户都有一个单独的数据库,他们的用户将访问我们的前端应用程序,这个应用程序将位于一个包含以下信息的数据库中,他们是什么enterprise 并会 return 为他们提供一些连接信息。在此之后,每个用户都会有他们企业的信息,我们的 API 将获取此信息并连接到数据库中并获取数据。我的问题是我不知道执行此操作的最佳方法(在每个请求中实例化一个数据源并在 || 之后断开连接在企业 x 的用户连接后,我将在该企业的活动用户 || 上打开此连接其他解决方案)?我在这种情况下尝试使用 lb4 是错误的?
My situation is similar to yours, my team is using `Mongodb` 4.x and I assume you are using it.
麻烦
据我了解,你的问题是
- 你需要在不同的请求中动态使用不同的
DataSource
。
- 实例化后当前
DataSource
地址不变
Mongodb
的解决方案
您需要创建一个 class extends with juggler.DataSource
每次都可以动态切换数据库,然后 inject
这个 class 到每个 controller
。
- loopback-datasource-juggler/types/datasource.d.ts
export declare class DataSource extends EventEmitter {
...
connector?: Connector; // <= can access `Mongodb Client` object
- 创建 class 扩展
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
class并在控制器中使用
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');
// ...
}
}
我和我的团队将开发一些可以与其他人通信的应用程序,这个应用程序基本上是这样工作的: 用 React 构建的前端应用程序,可与 API 通信。这个 API 的工作方式是:我们的每个客户都有一个单独的数据库,他们的用户将访问我们的前端应用程序,这个应用程序将位于一个包含以下信息的数据库中,他们是什么enterprise 并会 return 为他们提供一些连接信息。在此之后,每个用户都会有他们企业的信息,我们的 API 将获取此信息并连接到数据库中并获取数据。我的问题是我不知道执行此操作的最佳方法(在每个请求中实例化一个数据源并在 || 之后断开连接在企业 x 的用户连接后,我将在该企业的活动用户 || 上打开此连接其他解决方案)?我在这种情况下尝试使用 lb4 是错误的?
My situation is similar to yours, my team is using `Mongodb` 4.x and I assume you are using it.
麻烦
据我了解,你的问题是
- 你需要在不同的请求中动态使用不同的
DataSource
。 - 实例化后当前
DataSource
地址不变
Mongodb
的解决方案
您需要创建一个 class extends with juggler.DataSource
每次都可以动态切换数据库,然后 inject
这个 class 到每个 controller
。
- loopback-datasource-juggler/types/datasource.d.ts
export declare class DataSource extends EventEmitter {
...
connector?: Connector; // <= can access `Mongodb Client` object
- 创建 class 扩展
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
class并在控制器中使用
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');
// ...
}
}