我正在尝试使用在项目外部定义的类型orm实体。也就是说,我有两个项目:模型和core-api。模型是一个npm软件包,可导出实体定义。因此,从core-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 {}
然后,在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 {}
这将导致下一个错误:
RepositoryNotFoundError: No repository for "A" was found. Looks like this entity is not registered in current "https://stackoverflow.com/a/54191513/3943197https://stackoverflow.com/a/54191513/3943197default" connection?
由于我不了解它的工作原理,我对如何遵循它完全迷失了。我看到了typeorm和@ nestjs / typeorm的代码,但我不知道如何解决它。
谢谢!
更新:
我可以通过添加实体类而不是像@serianox这样的路径来使其工作。同样,something/models
npm软件包将导出一个独立的嵌套模块。此模块导入/导出包上定义的实体。因此,我可以将实体注入到主应用程序中。
答案 0 :(得分:2)
您可以将对类的引用传递给“实体”,而不是路径, 例如:
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 {}
答案 1 :(得分:0)
似乎您正在从node_modules导入.ts
文件。我相信一旦您构建了npm软件包,这些实体现在就是.js
文件。您应该尝试修改表达式,以便它可以解析.js文件。
我个人从不使用ts-node
,因为它会带来这种麻烦,并且调试实际上并不可用。我觉得您应该始终使用node
运行时并仅解析.js
文件(而且,它更接近生产运行时)。
答案 2 :(得分:0)
我认为找到了解决该问题的方法;
我们可以像这样从npm模块导入模块
=ARRAYFORMULA(IFNA(VLOOKUP(IFNA(REGEXEXTRACT(A2:A&"",
TEXTJOIN("|", 1, SORT(Sheet1!F2:F, 1, 0)))), Sheet1!F2:G, 2, 0)))
然后迭代它们并存储在数组中
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);
}
}
我希望对您有帮助
欢呼