用户登录

在 Nest.js 的模块里面,可以重新导出它导入的模块。比如在 A 模块里导入了 B 模块,在 A 模块里又导出了 B 模块,这样其它模块在导入了 A 模块以后,就可以使用 A 模块提供的功能,还有在 A 模块里导出的 B 模块提供的功能。

下面可以通过一个例子来理解一下模块的重新导出。先创建两个模块,在终端,项目所在目录的下面,生成一个模块 nest generate 一个 module,放在 modules 里面,名字是 common。

可以再生成一个 Service,nest generae 一个 service ,放在 modules/common 里面,名字是 logger,nest 命令行工具会自动更新 Common 模块,在模块的 providers 里面,添加一个 LoggerService 。

再生成一个 module ,nest generate ,生成一个 module,放在 modules 里面,名字是 core 。

回到项目,打开 CommonModule 模块,你会发现,在这个模块的 providers 里面,已经添加了一个 LoggerService。 打开定义这个服务的文件。

在这个服务里面随便先添加一个方法,方法的名字是 log,接收一个 message 参数,类型是 string。方法做的事情就是用一下 console.log,输出这个方法的 message 参数。

然后回到 CommonModule 模块,设置一下这个模块要提供的功能,添加一个 exports ,导出这个模块里的 LoggerService。

再打开 CoreModule 模块,添加一个 imports,导入 CommonModule 模块,这样在这个模块里面就可以使用这个 CommonModule 模块里提供的功能了,下面再添加一个 exports,在模块的导出里面,可以添加一个 CommonModule 。

这样如果其它的模块导入了 CoreModule 模块,可以使用 CoreModule 模块导出的东西,另外也可以使用在 CoreModule 模块里导出的 CommonModule 模块里导出的东西。

下面可以试一下。

打开 UserModule 模块,在这个模块的 imports 里面,导入 CoreModule,然后打开 UserModule 模块里的 UserController ,假设在这个控制器我们需要使用 CommonModule 模块里的 LoggerService,可以把它作为依赖注入进来。

添加一个构造方法,constructor,给这个方法提供一个参数属性,private readonly ,参数属性的名字是 logger,类型是 LoggerService。注意这个 LoggerService 是在 CommonModule 模块里导出的。 在这个控制器里如果想要注入这个 LoggerService,需要在这个控制器所属的模块,也就是 UserModule 模块里导入 CommonModule 模块。

不过因为在 CoreModule 模块里导入又导出了 CommonModule 模块,所以我们在 UserModule 模块里导入了 CoreModule 模块以后,也可以使用 CommonModule 模块里导出的功能。

在下面这个 getUser 方法里面,用一下 this.logger 上的 log 方法,输出一条信息,UserController: getUser.

打开一个 Http 客户端,访问一下 profile 这个地址。

然后回到运行项目开发服务的终端,你会发现,这里输出了一条信息,UserController: getUser 。 这就说明我们成功的在 UserController 这个控制器里面,使用了来自 CommonModule 模块里的 LoggerService 提供的功能。

模块里的重新导出《 企业级应用架构:模块 》

统计

12489
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点