【问题标题】:No metadata for "User" was found using TypeOrm使用 TypeOrm 未找到“用户”的元数据
【发布时间】:2019-01-04 19:50:34
【问题描述】:

我正在尝试使用 TypeORM 让 basic setup 工作,并在设置后收到此错误。

这是一个 REPL(只需执行 yarn install && yarn db:dev 后跟 yarn db:migrate && yarn start 即可重现错误)

Inserting a new user into the database...
{ EntityMetadataNotFound: No metadata for "User" was found.
    at new EntityMetadataNotFoundError (/Users/admin/work/typeorm-naming-strategy/src/error/EntityMetadataNotFoundError.ts:9:9)
    at Connection.getMetadata (/Users/admin/work/typeorm-naming-strategy/src/connection/Connection.ts:313:19)
    at /Users/admin/work/typeorm-naming-strategy/src/persistence/EntityPersistExecutor.ts:77:55
    at Array.forEach (<anonymous>)
    at EntityPersistExecutor.<anonymous> (/Users/admin/work/typeorm-naming-strategy/src/persistence/EntityPersistExecutor.ts:71:30)
    at step (/Users/admin/work/typeorm-naming-strategy/node_modules/typeorm/persistence/EntityPersistExecutor.js:32:23)
    at Object.next (/Users/admin/work/typeorm-naming-strategy/node_modules/typeorm/persistence/EntityPersistExecutor.js:13:53)
    at /Users/admin/work/typeorm-naming-strategy/node_modules/typeorm/persistence/EntityPersistExecutor.js:7:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/admin/work/typeorm-naming-strategy/node_modules/typeorm/persistence/EntityPersistExecutor.js:3:12)
  name: 'EntityMetadataNotFound',
  message: 'No metadata for "User" was found.' }

【问题讨论】:

    标签: typeorm


    【解决方案1】:

    在我的情况下,我在创建连接后忘记使用 connection.connect() 方法,并且在使用 manager.find() 时遇到同样的错误。

    【讨论】:

      【解决方案2】:

      我收到了这个错误消息,但我以不同的方式解决了,例如,当您已经有一个名为“users”的表时,也可能发生这种情况,并且您的模型 User 的列和配置与您的表不同,在我的情况下,我的表有一个名为 posts 的列具有默认值,而我的模型没有设置该默认值,所以在您检查 ormconfig.json 上的实体目录之前,我强烈建议您检查您的模型是否与您的数据库表具有相同的属性和配置

      【讨论】:

        【解决方案3】:

        我将为这个答案列表做出贡献。就我而言,我正在使用一个花哨的 IDE,它喜欢在我不知情的情况下将 ts 代码自动转换为 js。我遇到的问题是,生成的 js 文件不是 bueno。杀死这些自动生成的文件就是答案。

        我的ormconfig 的相关位看起来像:

        {
          ...
          "entities": ["src/entity/**/*.ts", "test/entity-mocks/**/*.ts"],
          "migrations": ["src/migration/**/*.ts"],
          "subscribers": ["src/subscriber/**/*.ts"]
          ...
        }
        

        实际上,我什至尝试了上面的方法,如果它们存在,我什至还包括转译的 js 文件,并且我得到了其他奇怪的行为。

        【讨论】:

          【解决方案4】:

          添加答案有点晚,但这是非常常见的错误。

          上述错误有两个主要原因。在 OrmConfig 中,

          1. 您使用了 *.ts 而不是 *.js。例如,
          entities: [__dirname + '/../**/*.entity.ts']  <-- Wrong
          

          应该是

          entities: [__dirname + '/../**/*.entity.js'] 
          
          1. 实体路径错误。确保实体路径是根据 dist 文件夹而不是 src 文件夹定义的。

          【讨论】:

          • 实际上恰恰相反。 .ts 正确,.js 错误。
          • @user2912903 用 .js 更改 .ts 为我完成了这项工作,我正在阅读一些文章,他们也使用了 .ts,有人可以解释发生了什么吗?
          【解决方案5】:

          在我的情况下,我忘记将新实体(在您的情况下为 User )添加到 app.module.ts 。 这是对我有用的解决方案:

          // app.module.ts
          
          @Module({
              imports: [
                TypeOrmModule.forRoot({
                  ...
                  entities: [User]
                  ...
                }),
                ...
              ],
          })
          

          【讨论】:

            【解决方案6】:

            我的失败在于我没有使用模型,而是使用了请求。请求较早加载,因此未定义结束。尝试将您的模型类移动到模型

            【讨论】:

              【解决方案7】:

              以下将确保TypeORM使用的文件扩展名是.js和.ts

              entities: [__dirname + '/../**/*.entity.{js,ts}']
              

              在您的配置文件中更改它。

              【讨论】:

                【解决方案8】:

                问题出在ormConfig

                请尝试使用这个:

                entities: [__dirname + '/../**/*.entity.{js,ts}']
                

                【讨论】:

                • 这对我有用。请你解释一下这条路径的含义__dirname + '/../**/*.entity.{js,ts}'
                • 应用启动时,TS代码被转译成JS,因此TypeORM配置也被转译成JS,TypeORM无法读取,除非你设置entities同时读取JS和TS文件。这里使用的{js,ts} 语法只是意味着读取任何带有jsts 后缀的文件。
                • 谢谢。这项工作为我编。这是转译问题。
                【解决方案9】:

                我相信我的问题是由于意外同时拥有 ormconfig.json 和 ormconfig.ts 而引起的

                【讨论】:

                • 哦,是的,它可能会对此感到困惑。如果它说 EntityMetadataNotFound ,您就知道问题是您的实体没有被定位,否则,元数据将被加载。因此,您可以从定义实体的任何地方开始
                猜你喜欢
                • 1970-01-01
                • 2023-03-19
                • 2022-10-06
                • 2018-09-22
                • 2020-10-02
                • 1970-01-01
                • 2021-07-20
                • 1970-01-01
                • 2021-05-28
                相关资源
                最近更新 更多