用户登录

之前我们创建的模块都是静态的,就是我们在使用这些模块提供的功能的时候没办法配置这些模块。在 Nest 里面,我们可以创建动态模块,使用这种模块的时候可以使用一个方法配置一下这个模块。下面我们就通过一个简单的例子,理解一下怎么样创建这种动态模块。

在应用的 common/logger 里面,有个 LoggerService,下面我们可以把这个服务单独放在一个 LoggerModule 模块里。

在终端,生成一个模块,nest generate,生成一个 module,放在 modules/common/logger 里面,

回到项目,打开项目里的 CommonModule 模块,之前我们把 LoggerService 作为这个模块的一部分,现在这个 LoggerService 我要把它放在一个 LoggerModule 模块里,所以这里可以去掉导入的 LoggerService,换成一个 LoggerModule 模块,在 exports 里面,要导出的东西也需要换成 LoggerModule。

LoggerModule

打开 LoggerModule 模块,现在我们需要创建一个动态模块,在这种模块里面,一般都会包含一个 register 或者 forRoot 静态方法,然后在使用这个模块的时候,可以通过这个静态方法去配置一下这个模块。

这个方法的名字可以可以随便定义,但是一般都会使用 register 或者 forRoot。

添加一个 static 方法,名字是 register ,设置一下这个方法返回的东西的类型,应该设置成 DynamicModule ,这个东西来自 @nestjs/common 。

方法 return 的东西是一个动态模块,这个动态模块跟普通的静态模块没有太大区别,只是多了一个 module 属性,return 的是一个对象,里面先添加一个 module 属性,这个属性的值就是这个模块的名字,一般就是这个模块类的名字,这里就是 LoggerModule。

模块里面可以再添加一个 providers 属性,配置一下这个模块的 Provider,添加一个 LoggerService 。然后再添加一个 exports,可以导出这个模块提供的 Provider,也就是这个模块对外提供的东西。添加一个 LoggerService。

使用动态模块

下面可以再去试一下,打开 CommonModule 模块,在模块里导入使用动态模块,可以调用这个模块类上定义的那个静态方法,在 LoggerModule 模块里,我们把这个方法的名字设置成了 register,所以在这里要用一下 register 这个方法。这个方法会返回一个模块。

打开 Http 客户端,请求一下 profile 这个地址。回到运行项目开发服务的终端,这里会输出一条信息,UserController: getUser,输出这条信息,用的就是 LoggerModule 模块里的 LoggerService 服务提供的功能。

动态模块:可以配置的模块《 企业级应用架构:模块 》

统计

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

社会化网络

关于

微信订阅号

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