如何在带有typeorm的nestjs项目中使用外部实体?

如何在带有typeorm的nestjs项目中使用外部实体?,nestjs,typeorm,Nestjs,Typeorm,我试图使用项目外部定义的类型orm实体。也就是说,我有两个项目:模型和核心api。Models是导出实体定义的npm包。因此,从核心api(nestjs项目)开始,我尝试使用这些实体定义连接。大概是这样的: @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'postgres', port: 5432, username: 'myuser', password:

我试图使用项目外部定义的类型orm实体。也就是说,我有两个项目:模型和核心api。Models是导出实体定义的npm包。因此,从核心api(nestjs项目)开始,我尝试使用这些实体定义连接。大概是这样的:

@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 {}
然后,在一个模块中,我从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 {}
这将导致下一个错误:

RepositoryNotFoundError:找不到“A”的存储库。看起来此实体未在“当前”中注册https://stackoverflow.com/a/54191513/3943197https://stackoverflow.com/a/54191513/3943197default“连接?

我完全不知道如何跟随,因为我不明白它在引擎盖下是如何工作的。我看到了typeorm和@nestjs/typeorm的代码,但我不知道如何解决它

谢谢

更新:
我可以添加实体类,而不是@serianox所说的路径。另外,
something/models
npm包导出一个独立的嵌套模块。此模块导入/导出包上定义的实体。因此,我可以在主应用程序上注入实体。

看起来您正在从节点模块导入
.ts
文件。我相信,一旦构建了npm包,这些实体现在就是
.js
文件。您应该尝试修改表达式,以便它可以解析.js文件


就我个人而言,我从来没有使用过
ts节点
,因为它会带来这种麻烦,而且调试也不可用。我觉得您应该始终使用
节点
运行时,只解析
.js
文件(而且,它更接近生产运行时)。

您可以将类的引用传递给“实体”,而不是路径, 例如:

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 {}

我认为找到了解决这个问题的方法

我们可以像这样从npm模块导入模块

import * as Models from "your-models-package";
然后迭代它们并存储在数组中

const models = [];
for (const key in Models) {
  if (Models.hasOwnProperty(key)) {
    const model = Models[key];
    models.push(model);
  }
}
最终用于模块定义

const dbConfig = TypeOrmModule.forRoot({
  type: "postgres",
  database: config.postgres.db,
  host: config.postgres.host,
  port: Number(config.postgres.port),
  username: config.postgres.user,
  password: config.postgres.pass,
  entities: models,
  synchronize: true,
});
我希望有帮助


干杯

是的,这是我需要的东西之一。谢谢如何访问@models?