NestJs - TypeORM 配置可以工作,但不能与 ConfigService 一起使用

2023-12-27

我想使用 NestJs 和 TypeORM 创建一个 REST API。在我的应用程序模块.ts我加载 TypeORM 模块

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'postgres',
      database: 'api',
      entities: [`${__dirname}/**/*.entity.{ts,js}`],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

目前运行良好。我想从外部 .env 文件加载配置,以便从文档中加载

https://docs.nestjs.com/techniques/database#async-configuration https://docs.nestjs.com/techniques/database#async-configuration

从这里开始

NestJS 将 ConfigService 与 TypeOrmModule 结合使用 https://stackoverflow.com/questions/52570212/nestjs-using-configservice-with-typeormmodule

我在根项目目录中创建了一个 .env 文件,内容如下

DATABASE_TYPE = postgres
DATABASE_HOST = localhost
DATABASE_PORT = 5432
DATABASE_USERNAME = postgres
DATABASE_PASSWORD = postgres
DATABASE_NAME = api
DATABASE_SYNCHRONIZE = true

接下来我将代码更新为

@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        type: configService.get<any>('DATABASE_TYPE'),
        host: configService.get<string>('DATABASE_HOST'),
        port: configService.get<number>('DATABASE_PORT'),
        username: configService.get<string>('DATABASE_USERNAME'),
        password: configService.get<string>('DATABASE_PASSWORD'),
        database: configService.get<string>('DATABASE_NAME'),
        entities: [`${__dirname}/**/*.entity.{ts,js}`],
        synchronize: configService.get<boolean>('DATABASE_SYNCHRONIZE'),
      }),
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

不幸的是我在启动时收到此错误

[Nest] 28257   - 01/06/2020, 7:19:20 AM   [ExceptionHandler] Nest can't resolve dependencies of the TypeOrmModuleOptions (?). Please make sure that the argument ConfigService at index [0] is available in the TypeOrmCoreModule context.

Potential solutions:
- If ConfigService is a provider, is it part of the current TypeOrmCoreModule?
- If ConfigService is exported from a separate @Module, is that module imported within TypeOrmCoreModule?
  @Module({
    imports: [ /* the Module containing ConfigService */ ]
  })
 +1ms

当我将配置记录在我的main.ts引导程序函数我从 .env 文件中获得了正确的配置。

我该如何修复该错误?


需要发生以下两件事之一:

1)你需要让你的ConfigModule全局通过传递isGlobal: true选项ConfigModule.forRoot()。如果你这样做,那么你可以删除导入TypeormModule.forRootAsync()(它是一个全局模块,可以在任何地方使用它的提供者)

2)制作另一个模块(MyConfigModule或其他什么)imports the ConfigModule及其配置和exports the CofnigModule。然后你可以改变ConfigModule.forRoot() to MyConfigModule in the AppModule你可以改变imports: [ConfigModule] to imports: [MyConfigModule] in the TypeormModule.forRootAsync()配置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NestJs - TypeORM 配置可以工作,但不能与 ConfigService 一起使用 的相关文章

随机推荐

  • 为什么Java 8的Optional不能在参数中使用

    我在许多网站上读过 Optional 应该仅用作返回类型 而不应在方法参数中使用 我正在努力寻找一个合乎逻辑的理由 例如 我有一段逻辑 它有 2 个可选参数 因此 我认为像这样编写我的方法签名是有意义的 解决方案 1 public int
  • 在 Haskell 中实现类型类时的任意类约束

    我正在尝试实现一个简单的Set在 Haskell 中 我陷入了如何表达它包含的元素的类约束的困境 The Set类型类相当简单 class Set s where empty s a isEmpty s a gt Bool insert s
  • ggplot图例不显示

    以下代码不显示图例 library ggplot2 g ggplot g g geom line aes x 1 10 y 1 10 color red size 0 2 g g geom line aes x 5 12 y 15 22 c
  • R中的sqldf包,查询数据框

    我正在尝试使用 R 中的 sqldf 库重写一些代码 这应该允许我在数据帧上运行 SQL 查询 但我遇到一个问题 每当我尝试运行查询时 R 似乎都会尝试查询我使用的实际 MySQL 数据库 con 并通过我试图搜索的数据框的名称查找表 当我
  • System.Threading.ThreadAbortException:线程被中止

    我在执行该过程时收到此错误 此问题仅出现在生产中 而不出现在测试和开发系统中 而且这个问题也不会一直发生 当出现此错误时 通过应用程序使用此数据库的所有用户都会被挂起 这意味着与数据库的所有用户连接都将被重置 几秒钟后它会恢复并正常工作 错
  • 如何在Python中处理大的小数?

    我正在解析数据列表 数据是一个值列表 它们非常大 有很多小数点 例如 3 21446735874 48 4505248207 0 3 21476825075 48 4504325609 0 我需要能够在计算中使用这些数字 而无需 pytho
  • Excel文本连接字符串文件路径无效[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个连接字符串 txt使用 C 文件 我不断收到错误消息 指出我的文件路径无效 string excelConnectionString Provider Microsoft Jet OLEDB 4
  • 更改MYSQL日期格式

    我在 MYSQL 中有一个表 其中 3 列有日期 并且它们的格式不符合要求 目前我有 月 日 年我想将这些日期更改为日 月 年 表名称为 Vehicles 列名称为 CRTD INSR SERD 您当前列的数据类型不是date正确的 您需要
  • 如何在 python 中使用 pandas 获取所有重复项的列表?

    我有一份可能存在出口问题的物品清单 我想获得重复项目的列表 以便我可以手动比较它们 当我尝试使用 pandas 时重复法 http pandas pydata org pandas docs dev generated pandas Dat
  • Servlet 和 Filter 在 Grails 中注册为 Spring Bean,而不是 web.xml

    在圣杯中 从 2 x 升级到 3 0 6 文档 https grails github io grails doc latest guide upgrading html有人指出 新的 servlet 和过滤器可以分别注册为 Spring
  • 如何将 Objective-C 和 Swift Pod 集成到 iOS 应用程序的同一项目中

    我正在 iOS 应用程序中做 Objective C 但问题是我想添加一些 Objective C api 到我之前用 cocoa pods 成功添加的地方 但是 现在我想通过 cocoa pods 添加 Swift Api 但是安装时遇到
  • Keras 准确率没有改变

    我有几千个音频文件 我想使用 Keras 和 Theano 对它们进行分类 到目前为止 我生成了每个音频文件的 28x28 频谱图 越大越好 但我只是想让算法在这一点上工作 并将图像读入矩阵中 所以最后我把这个大图像矩阵输入到网络中进行图像
  • Gitlab CI/CD 在管道之间传递工件/变量

    tl dr 我如何传递数据 例如这 BUILD VERSION变量 Gitlab CI 中不同管道中的作业之间 所以 就我而言 Pipeline 1 on push ect Pipeline 2 after merge building j
  • 如何根据模式列表对条纹字符串进行标记

    Given a string S and a list L of patterns L1 Ln how would you find the list of all tokens in S matching a pattern in L a
  • 循环最多运行一次,(循环增量从未执行)

    我有一个选择器视图 我希望其中的内容是飞机的尾号 我使用此代码 但收到警告Loop will run once at most loop increment never executed 然后我得到错误control may each en
  • 如何在 Protractor 中发出 HTTP GET+POST 请求

    我在 Protractor 中发送 HTTP get 请求时遇到问题 实际上 我需要在用户界面中执行某些操作后检查数据库中的数据 如果我能够使用 JQuery 来完成它 那将非常有帮助 但我无法找到如何在 Protractor 中使用 JQ
  • SSRS 2005 报告中的多值选择和可选过滤器

    在在这里提出这个问题之前 我已经做了相当多的研究 首先 我想创建一个下拉过滤器 accessVar 能够选择多个值 如果不是因为我的特殊要求 这会很容易 我的数据集声明是 SELECT PASS M ENTRY DT EXIT DT WOR
  • Google应用程序脚本,gmail插件在卸载插件时删除用户属性[重复]

    这个问题在这里已经有答案了 我已经使用谷歌脚本创建了简单的 gmail 插件 因为我在这里遇到了困难 我已经使用了 UserProperties 问题是 我存储了一些用户级别脚本值 卸载插件时 我们需要删除 UserProperties 提
  • 如何设置我的 Vue.js 站点以在每次热重载事件时清除浏览器的 Javascript 控制台?

    我有一个带有 Webpack Dev Middleware 的 Vue js 站点 通过 HTTP sys Web 服务器通过 ASP NET Core 站点提供服务 尽管我猜这并不重要 有谁知道如何设置我的网站以在每次热重载事件时清除浏览
  • NestJs - TypeORM 配置可以工作,但不能与 ConfigService 一起使用

    我想使用 NestJs 和 TypeORM 创建一个 REST API 在我的应用程序模块 ts我加载 TypeORM 模块 Module imports TypeOrmModule forRoot type postgres host l