我正在尝试使用在项目外部定义的类型 orm 实体。也就是说,我有两个项目:models 和 core-api。模型是一个导出实体定义的 npm 包。因此,从 core-api(nestjs project) 我试图使用这些实体定义连接。像这样的东西:
@Module({
imports: [ TypeOrmModule.forRoot({
type: 'postgres',
host: 'postgres',
port: 5432,
username: 'myuser',
password: 'mypass',
database: 'mydb',
entities: [
__dirname + '../node_modules/something/models/src/*.entity.ts'
],
synchronize: true,
}), AModule ],
controllers: [],
providers: [],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
然后,在 A 模块中,我从 npm 包中导入 A 实体:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AsController } from './As.controller';
import { AsService } from './As.service';
import { A } from 'something/models';
@Module({
imports: [TypeOrmModule.forFeature([ A ])],
controllers: [AController],
providers: [AService],
})
export class AModule {}
Run Code Online (Sandbox Code Playgroud)
这最终会出现下一个错误:
RepositoryNotFoundError: No repository for "A" was found. Looks like this entity is not registered in current "/sf/answers/3793405941/://stackoverflow.com/a/54191513/3943197default" connection?
我完全不知道如何遵循,因为我不明白它在幕后是如何工作的。我看到了 typeorm 和 @nestjs/typeorm 的代码,但我不知道如何解决它。
谢谢!
更新:
我可以添加实体类而不是像@serianox 所说的路径。此外,something/models
npm 包导出一个独立的嵌套模块。此模块导入/导出包上定义的实体。因此,我可以在主应用程序上注入实体。
小智 5
您可以将类的引用传递给“实体”而不是路径,例如:
import {Entity1, Entity2} from '@models'
@Module({
imports: [ TypeOrmModule.forRoot({
type: 'postgres',
host: 'postgres',
port: 5432,
username: 'myuser',
password: 'mypass',
database: 'mydb',
entities: [
Entity1, Entity2
],
synchronize: true,
}), AModule ],
controllers: [],
providers: [],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
看来您正在.ts
从 node_modules 导入文件。我相信一旦你构建了 npm 包,这些实体现在就是.js
文件了。您应该尝试修改表达式,以便它可以解析 .js 文件。
就我个人而言,我从不使用它ts-node
,因为它会带来这种麻烦,而且调试也无法真正使用它。我觉得你应该始终使用node
运行时并仅解析.js
文件(而且,它更接近生产运行时)。
归档时间: |
|
查看次数: |
3651 次 |
最近记录: |