相关疑难解决方法(0)

如何使用 Nestjs 中的请求范围提供程序动态更改数据库连接?

使用Nestjs 6.x、Mongoose、Mongo等开发一个项目...关于后端,在我的用例中,我必须根据来自某些请求的某些条件/参数更改我的数据库之一的连接。

基本上,我这个

mongoose.createConnection('mongodb://127.0.0.1/whatever-a', { useNewUrlParser: true })
Run Code Online (Sandbox Code Playgroud)

我想改为,例如

mongoose.createConnection('mongodb://127.0.0.1/whatever-b', { useNewUrlParser: true })
Run Code Online (Sandbox Code Playgroud)

因此,我在 Nestjs 中有第一个提供者

export const databaseProviders = [
  {
    provide: 'DbConnectionToken',
    useFactory: async (): Promise<typeof mongoose> =>
    await mongoose.createConnection('mongodb://127.0.0.1/whatever', { useNewUrlParser: true })
  }
Run Code Online (Sandbox Code Playgroud)

我研究了一段时间,发现在Nestjs 6.x版本中,提供程序请求允许我动态修改每个请求某些提供程序的注入。

不管怎样,我不知道如何实现我的改变,也不知道它是否会起作用,以防我实现这一目标

有人可以帮助或指导我吗?提前谢谢了。

mongoose mongodb node.js typescript nestjs

6
推荐指数
2
解决办法
1万
查看次数

使用多租户构建 Nest.js 应用程序(使用 postgres 模式的每个租户和续集 ORM)并动态切换模式?

我们的团队决定使用 Nest.js 来实现基于 SaaS 的应用程序,并且是 Node.js 环境的新手。对于数据库存储,我们使用 postgres,它支持每个租户的多个模式,sequelise 是我们的 ORM。现在我们面临的一个问题是如何动态切换schema。经过大量研究后,我们找不到可靠的方法。以下是我们遇到的一些事情,

现在我的问题是,由于 node.js 是单线程环境,我想知道下面提到的哪种方式是续集的最佳用例。

  • 创建一个中间件并将架构名称动态设置为请求标头。

选项1:

从sequelise的文档中,有一个选项可以使用“options.searchPath”为每个orm方法(find、findAll ...)设置搜索路径。由于 Node.js 是单线程的,因此在请求标头中传递架构名称并在这样的查询中使用它,是否会导致需要注意的任何问题。在 Ruby On Rails 中,我们有单独的线程使用“thread.current”来处理这个问题,有人可以解释这种方法吗?

选项2:

由于我们已经有了基于代码的代码,是否有一种像 typeOrm 版本那样动态获取续集数据库连接的方法,如上所述,这样我们就不会更改现有代码中的其他任何地方,如果是这样,该怎么做?

谢谢

postgresql database-schema sequelize.js nestjs

5
推荐指数
0
解决办法
2315
查看次数