我们在系统中用过很多周边生态包,例如: nestjs-redis
、 @nestjsx
系列等等,这些第三方包有一些需要传入配置,有一些仅仅是 import
后就好了,对于不需要传入配置的,当然做起来就容易了,需要传入配置的就需要设计如何传入配置了。 NestJS
官方并没有限制传参格式,仅仅简单描述了一下传参形式,还不全。。。因此需要我们自己来设计传参方案了。
操千曲而后晓声,观千剑而后识器。 设计肯定不是凭空而来的,也不是按照自己的想法随意设计只要能实现功能和需求就行,设计要有艺术感。这里选取两个比较流行的带有传参的第三方包来参考。分别是:nestjs-redis和@nestjs/typeorm。
设计需求
对于 NestJS
项目来说,传参配置需要两种形式,分别为同步和异步。
同步的意思是在模块注册的时候已经明确的知道了配置信息,异步的意思是在模块注册的时候并不知道明确的配置信息,需要动态计算出来。
参考
nestjs-redis
首先看一下 nestjs-redis
这个包,它提供同步和异步两种模式,同步的方式采用 register
命名,异步采用 forRootAsync
命名,如下所示:(摘自npm上说明文档)
register
import { Module } from '@nestjs/common' import { RedisModule} from 'nestjs-redis' @Module({ imports: [ RedisModule.register(options) ], }) export class AppModule {}点击复制复制失败已复制
forRootAsync
import { Module } from '@nestjs/common'; import { RedisModule} from 'nestjs-redis' @Module({ imports: [ RedisModule.forRootAsync({ useFactory: (configService: ConfigService) => configService.get('redis'), // or use async method //useFactory: async (configService: ConfigService) => configService.get('redis'), inject:[ConfigService] }), ], }) export class AppModule {}点击复制复制失败已复制
@nestjs/typeorm
@nestjs/typeorm
这个包也提供同步和异步两种模式,同步采用 forRoot
命名,异步采用 forRootAsync
命名,关于这个包的配置规则直接参考 NestJS
官方文档中的数据库部分即可,文档地址
配置设计
经过这两个包的参考,最终选择采用 @nestjs/typeorm
的设计方案,毕竟官方出品,各方面都有保证。
提示
尽管这里面值列了两个包,但实际上不止看过这两个包,这里选取两个质量好的来展示。
最终,我选择同步配置时采用 forRoot
命名,异步采用 forRootAsync
命名。并且在异步时,支持 useExisting
、 useClass
和 useFactory
三种模式。
未完待续。。。