EntityMetadataNotFound:未找到 "Task" 的元数据 - NestJS
EntityMetadataNotFound: No metadata for "Task" was found - NestJS
我正在学习 Udemy 的 NestJS 课程 https://www.udemy.com/course/nestjs-zero-to-hero。
我遇到了一个奇怪的问题,我尝试了很多方法,但似乎没有任何效果。这是我的问题和完整代码。
我得到的错误
我的ORM配置文件:
**任务实体文件:**
最后我在tasks.module.ts文件中导入配置文件
遇到这个问题的人已经用不同的修复方法解决了它,
- 有人说我们可能在配置中添加了拼写错误的文件名或路径,这可能导致了这个问题。
- 有人说从 npm 更改为 yarn 已经解决了这个问题。
- 也很少有人说问题出在 ORM 本身。
我已经尝试了 Internet 上可用的所有可能解决方案,但无法解决此问题。现在已经好几天了,我正在寻找堆栈溢出方面的帮助或救星。
同时,我将尝试查看更多可能有所帮助的可能性,但如果您遇到此问题,请告诉我可能的解决方案。
您的 Task
class 上缺少 @Entity()
装饰器。这设置了 TypeORM 正在寻找的元数据 according to its docs.
您正在扩展 BaseEntity 这并不意味着它会将 @Entity 注释放置到您的实体 class。它基本上用于您希望每个实体都拥有的某些数据字段。
它的内部实现如下:-
// base.entity.ts
import { PrimaryGeneratedColumn, Column, UpdateDateColumn, CreateDateColumn } from 'typeorm';
export abstract class BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'boolean', default: true })
isActive: boolean;
@Column({ type: 'boolean', default: false })
isArchived: boolean;
@CreateDateColumn({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
createDateTime: Date;
@Column({ type: 'varchar', length: 300 })
createdBy: string;
@UpdateDateColumn({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
lastChangedDateTime: Date;
@Column({ type: 'varchar', length: 300 })
lastChangedBy: string;
@Column({ type: 'varchar', length: 300, nullable: true })
internalComment: string | null;
}
所以这将生成一个 uuid id 字段 and/or 一个 createDateTime-, lastChangedDateTime-fields。
注意:这些基础 class 应该是抽象的。
因此您必须在每个实体的开头放置 @Entity 注释 class
同时更改导入顺序,例如先导入 TypeOrmModule,然后再导入 TaskModule。
希望对您有所帮助。
entities: [__dirname + '/../**/*.entity.ts']
至
entities: [__dirname + '/../**/*.entity.js']
在typeorm.config.ts
对我有效
在 NestJS 中,在 .ts
旁边添加 .js
对我有用
typeorm.config.ts
之前
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const TypeORMConfig: TypeOrmModuleOptions = {
type: 'postgres',
url: process.env.DATABASE_URL,
synchronize: true,
entities: [__dirname + '/../**/*.entity.ts'],
migrationsTableName: 'Migrations_History',
};
之后
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const TypeORMConfig: TypeOrmModuleOptions = {
type: 'postgres',
url: process.env.DATABASE_URL,
synchronize: true,
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
migrationsTableName: 'Migrations_History',
};
该错误是由打字稿引起的
如果你设置 typeOrmCOnfig
像这样
编译后使用文件,即使用dist/*.js
根据 typeOrm 官方文档 loading-all-entities-from-the-directory 使用 ts-node 时请小心使用此方法。 outDir 可能指向与放置实体的位置不同的 location/file,从而导致上述错误。您需要在 outDir 目录中指定 .js 文件的路径。
将实体设置为:
entities: [__dirname + '../**/*.entity{.ts,.js}']
@Module({
imports: [
TasksModule,
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'userdata',
autoLoadEntities: true,
synchronize: true,
}),
],
})
export class AppModule { }
我遇到过同样的问题。在尝试了这里提到的所有其他解决方案后,它们对我不起作用,我通过添加以下选项修改了 typeorm.config.ts 文件:
autoLoadEntities: true,
这已解决问题。
像这样设置您的实体:
entities: ['dist/src/**/*.entity{.ts,.js}'],
我正在学习 Udemy 的 NestJS 课程 https://www.udemy.com/course/nestjs-zero-to-hero。
我遇到了一个奇怪的问题,我尝试了很多方法,但似乎没有任何效果。这是我的问题和完整代码。
我得到的错误
我的ORM配置文件:
**任务实体文件:**
最后我在tasks.module.ts文件中导入配置文件
遇到这个问题的人已经用不同的修复方法解决了它,
- 有人说我们可能在配置中添加了拼写错误的文件名或路径,这可能导致了这个问题。
- 有人说从 npm 更改为 yarn 已经解决了这个问题。
- 也很少有人说问题出在 ORM 本身。
我已经尝试了 Internet 上可用的所有可能解决方案,但无法解决此问题。现在已经好几天了,我正在寻找堆栈溢出方面的帮助或救星。
同时,我将尝试查看更多可能有所帮助的可能性,但如果您遇到此问题,请告诉我可能的解决方案。
您的 Task
class 上缺少 @Entity()
装饰器。这设置了 TypeORM 正在寻找的元数据 according to its docs.
您正在扩展 BaseEntity 这并不意味着它会将 @Entity 注释放置到您的实体 class。它基本上用于您希望每个实体都拥有的某些数据字段。
它的内部实现如下:-
// base.entity.ts
import { PrimaryGeneratedColumn, Column, UpdateDateColumn, CreateDateColumn } from 'typeorm';
export abstract class BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'boolean', default: true })
isActive: boolean;
@Column({ type: 'boolean', default: false })
isArchived: boolean;
@CreateDateColumn({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
createDateTime: Date;
@Column({ type: 'varchar', length: 300 })
createdBy: string;
@UpdateDateColumn({ type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
lastChangedDateTime: Date;
@Column({ type: 'varchar', length: 300 })
lastChangedBy: string;
@Column({ type: 'varchar', length: 300, nullable: true })
internalComment: string | null;
}
所以这将生成一个 uuid id 字段 and/or 一个 createDateTime-, lastChangedDateTime-fields。
注意:这些基础 class 应该是抽象的。
因此您必须在每个实体的开头放置 @Entity 注释 class
同时更改导入顺序,例如先导入 TypeOrmModule,然后再导入 TaskModule。
希望对您有所帮助。
entities: [__dirname + '/../**/*.entity.ts']
至
entities: [__dirname + '/../**/*.entity.js']
在typeorm.config.ts
对我有效
在 NestJS 中,在 .ts
旁边添加 .js
对我有用
typeorm.config.ts
之前
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const TypeORMConfig: TypeOrmModuleOptions = {
type: 'postgres',
url: process.env.DATABASE_URL,
synchronize: true,
entities: [__dirname + '/../**/*.entity.ts'],
migrationsTableName: 'Migrations_History',
};
之后
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const TypeORMConfig: TypeOrmModuleOptions = {
type: 'postgres',
url: process.env.DATABASE_URL,
synchronize: true,
entities: [__dirname + '/../**/*.entity{.ts,.js}'],
migrationsTableName: 'Migrations_History',
};
该错误是由打字稿引起的
如果你设置 typeOrmCOnfig
像这样
编译后使用文件,即使用dist/*.js
根据 typeOrm 官方文档 loading-all-entities-from-the-directory 使用 ts-node 时请小心使用此方法。 outDir 可能指向与放置实体的位置不同的 location/file,从而导致上述错误。您需要在 outDir 目录中指定 .js 文件的路径。
将实体设置为:
entities: [__dirname + '../**/*.entity{.ts,.js}']
@Module({
imports: [
TasksModule,
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'userdata',
autoLoadEntities: true,
synchronize: true,
}),
],
})
export class AppModule { }
我遇到过同样的问题。在尝试了这里提到的所有其他解决方案后,它们对我不起作用,我通过添加以下选项修改了 typeorm.config.ts 文件:
autoLoadEntities: true,
这已解决问题。
像这样设置您的实体:
entities: ['dist/src/**/*.entity{.ts,.js}'],