我创建了一个“文档”实体:
例如
@Entity()
export class Document {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
path: string;
...
}
Run Code Online (Sandbox Code Playgroud)
多个文档可以与不同的实体类型相关:post、userProfile 等
例如,在帖子实体中,我有几个字段都指定了文档关系。
@OneToOne(type => DocumentEntity)
@JoinColumn({ name: 'default_document' })
defaultDocument: DocumentEntity;
@OneToOne(type => DocumentEntity)
@JoinColumn({ name: 'featured_document' })
featuredDocument: DocumentEntity;
@OneToMany(type => DocumentEntity, document => document.post)
@JoinColumn({ name: 'other_documents' })
otherDocs: DocumentEntity[];
Run Code Online (Sandbox Code Playgroud)
我不清楚如何使文档关系双向。我曾希望在文档上有一个字段,例如:
@ManyToOne(type => abstractEntity, entity => entity.document)
parentEntity: abstractEntity;
Run Code Online (Sandbox Code Playgroud)
这样,如果我查询文档实体的父关系,我会得到如下结果:
documents: [
{
id: 1,
name: 'document 1',
path: 'https://image.hosted.service/1.jpg',
parentEntityId: 23
},
{
id: 2
name: 'document 2', …Run Code Online (Sandbox Code Playgroud) 我遵循了有关 pubsub/subsciprtions 的 Nestjs DOCS:
根据示例, pubsub 在给定解析器的顶部初始化为:
const pubSub = new PubSub();
Run Code Online (Sandbox Code Playgroud)
后来文档说:
“我们在这里使用了本地 PubSub 实例。相反,我们应该将 PubSub 定义为提供者,通过构造函数注入它(使用 @Inject() 装饰器),并在整个应用程序中重用它”
{
provide: 'PUB_SUB',
useValue: new PubSub(),
}
Run Code Online (Sandbox Code Playgroud)
但这会去哪里呢?
即如何在我的主 app.module 中提供此功能以便它在所有其他模块中可用的语法/方法是什么?
如果我尝试将其作为不同模块中的依赖项提供,我会遇到依赖项解析问题。应用程序模块
providers: [
AppService,
{
provide: APP_FILTER,
useClass: AllExceptionsFilter,
},
{
provide: 'PUB_SUB',
useValue: new PubSub(),
},
Run Code Online (Sandbox Code Playgroud)
一些解析器.js
constructor(
@Inject('PUB_SUB')
private pubSub: PubSub,
Run Code Online (Sandbox Code Playgroud)
给出: Nest 无法解析 MyResolver 的依赖项( MyResolver 由 MyModule 提供
我无法将 appmodule 导入 MyModule,否则我将创建循环依赖。
我是否定义一个仅提供 pub_sub 实例的新模块?