首页 > 解决方案 > 如何在 Nestjs 中的 typeorm 中正确配置 ormconfig.json 文件上的实体?

问题描述

我正在尝试将 TypeORM 与 Nestjs 一起使用,但在配置实体的路由时遇到了麻烦。

这是我的项目结构:

根文件夹 > src > 模块 > 课程 > 实体 > course.entity.ts

我的 ormconfig.json 看起来像这样:

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "",
  "database": "test",
  "entities": ["src/modules/**/entities/*.entity{.ts,.js}"],
  "synchronize": true
}

我的 app.module.ts 看起来像这样:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from "@nestjs/typeorm";
import { CoursesModule } from './modules/courses/courses.module';
import { SchoolsModule } from './modules/schools/schools.module';

@Module({
  imports: [
    TypeOrmModule.forRoot(),
    CoursesModule,
    SchoolsModule
  ],
  controllers: [],
  providers: [],
})
export class AppModule { }

但是当我使用命令npm run start:dev运行项目时出现此错误:

EntityMetadataNotFound: No metadata for "Course" was found.
    at new EntityMetadataNotFoundError (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\typeorm\error\EntityMetadataNotFoundError.js:10:28)
    at Connection.getMetadata (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\typeorm\connection\Connection.js:336:19)
    at EntityManager.getCustomRepository (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\typeorm\entity-manager\EntityManager.js:702:84)
    at Connection.getCustomRepository (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\typeorm\connection\Connection.js:365:29)
    at InstanceWrapper.useFactory [as metatype] (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\@nestjs\typeorm\dist\typeorm.providers.js:11:35)
    at Injector.instantiateClass (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\@nestjs\core\injector\injector.js:292:55)
    at callback (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\@nestjs\core\injector\injector.js:76:41)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async Injector.resolveConstructorParams (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\@nestjs\core\injector\injector.js:117:24)
    at async Injector.loadInstance (C:\Users\x_jem\Documents\Projects\www\titanx-e-learning-api\node_modules\@nestjs\core\injector\injector.js:80:9)

我试图在 app.module.ts 文件的 forRoot 方法上传递实体,如下所示:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from "@nestjs/typeorm";
import { CoursesModule } from './modules/courses/courses.module';
import { Course } from './modules/courses/entities/course.entity';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "username": "root",
      "password": "",
      "database": "test",
      "entities": [Course],
      "synchronize": true
    }),
    CoursesModule
  ],
  controllers: [],
  providers: [],
})
export class AppModule { }

一切正常,但我知道这不是我必须在生产服务器上执行此操作的方式。所以任何人都可以帮助我找到发生了什么以及如何解决它?

标签: nestjstypeorm

解决方案


推荐阅读