A 引入B B引入A
新建个项目看下
nest new circular-reference -p npm
nest g module aaa
nest g module bbb
启动后报错
如何解决这个问题? 先单独创建这两个 Module,然后再让两者关联起来,使用 forwardRef
再次启动不会报错
原因就在于 nest 会单独创建两个 Module,之后再把 Module 的引用转发过去
除了 Module ,provider 和 Service 也会存在 循环引用
nest g service ccc --no-spec --flat
nest g service ddd --no-spec --flat
并且互相引用下
import { Injectable } from '@nestjs/common';
import { DddService } from './ddd.service';
@Injectable()
export class CccService {
constructor(private dddService: DddService) {}
ccc() {
return 'ccc';
}
eee() {
return this.dddService.ddd() + 'eee';
}
}
import { Injectable } from '@nestjs/common';
import { CccService } from './ccc.service';
@Injectable()
export class DddService {
constructor(private cccService: CccService) {}
ddd() {
return this.cccService.ccc() + 'ddd';
}
}
app.service.ts 使用
import { Injectable } from '@nestjs/common';
import { CccService } from './ccc.service';
import { DddService } from './ddd.service';
@Injectable()
export class AppService {
constructor(
private cccService: CccService,
private dddService: DddService,
) {}
getHello(): string {
return this.dddService.ddd() + this.cccService.eee();
}
}
使用 forwardRef 解决
再次启动服务就没问题了