模块跟模块之间可能会出现循环依赖的问题,就是在模块 A 里面导入了模块 B,在模块 B 里面也导入了模块 A。解决这种循环依赖的问题可以使用 Nest 提供的一个帮手方法,叫 forwardRef。
在我们这个项目里面,AuthModule 模块导入了 UserModule 模块,因为在 AuthModule 模块里面可能需要用到 UserModule 模块里提供的东西。
假设由于某种原因,在 UserModule 模块里也需要用到 AuthModule 模块提供的功能。这就需要在 UserModule 模块里要导入 AuthModule 模块,打开 UserModule 模块,在它的 imports 里面,添加一个 AuthModule 。
回到运行项目开发服务的终端,你会发现,这里报了一个错误,提示 Nest cannot create the module instance,Nest 不能创建模块实例。Often this is because of a circular dependency between modules。 很多时候这是因为模块之间的循环依赖问题。Use forwardRef to avoid it 。使用 forwardRef 可以解决这个问题。
下面我们就用一下 forwardRef 解决这个循环依赖的问题。
先打开 AuthModule 模块,在导入 UserModule 的时候,可以用一下 forwardRef 这个帮手方法,它接收一个函数参数,这个函数要返回一个类型,这里就是 UserModule 。
再打开 UserModule 模块,用同样的方法再处理一下,用一下 forwardRef 这个函数,提供一个函数参数,这个函数返回的是个类型,类型是 AuthModule 。
保存一下文件,再回到终端观察一下,现在就不会再提示无法创建模块实例的错误了。