nestjs-config 提供了 registerAs
方法,我们可以利用它实现在使用时有类型和 key 的提示
创建一个 config 模块
以后我们就使用它了
nest g res config
创建一个配置文件夹 src/config/data
这里放置我们所有的配置文件,每个文件都是一个 registerAs
方法
我这里用几个简单的文件示例
import appConfig from './app.config'; import databaseConfig from './database.config'; import jwtConfig from './jwt.config'; export default [ appConfig, databaseConfig, jwtConfig, ];
改变 config.module.ts
文件
import { Global, Module } from '@nestjs/common'; import { ConfigModule as NestConfigModule } from '@nestjs/config'; import { ConfigService } from './config.service'; import config from './data'; @Global() @Module({ imports: [ NestConfigModule.forRoot({ isGlobal: true, load: [...config], }), ], providers: [ConfigService], exports: [ConfigService], }) export class ConfigModule {}
在 config.service.ts
中引入
提醒
这里记得在每次创建配置文件后引入一次
import { Global, Inject, Injectable } from '@nestjs/common'; import { ConfigType } from '@nestjs/config'; import appConfig from './data/app.config'; import cacheConfig from './data/cache.config'; import databaseConfig from './data/database.config'; import jwtConfig from './data/jwt.config'; import logConfig from './data/log.config'; import mailerConfig from './data/mailer.config'; import ossConfig from './data/oss.config'; import uploadConfig from './data/upload.config'; @Global() @Injectable() export class ConfigService { constructor( @Inject(appConfig.KEY) public readonly app: ConfigType<typeof appConfig>, @Inject(uploadConfig.KEY) public readonly upload: ConfigType<typeof uploadConfig>, @Inject(databaseConfig.KEY) public readonly database: ConfigType<typeof databaseConfig>, @Inject(jwtConfig.KEY) public readonly jwt: ConfigType<typeof jwtConfig>, @Inject(logConfig.KEY) public readonly log: ConfigType<typeof logConfig>, @Inject(cacheConfig.KEY) public readonly cache: ConfigType<typeof cacheConfig>, @Inject(mailerConfig.KEY) public readonly mailer: ConfigType<typeof mailerConfig>, @Inject(ossConfig.KEY) public readonly oss: ConfigType<typeof ossConfig>, ) {} }
使用
在使用时我们需要将配置模块注入 private readonly config: ConfigService
这时我们就可以根据之前 config.service.ts
文件配置的变量来使用了,就像这里的 jwtConfig
我们的变量名称为 jwt
@Inject(jwtConfig.KEY) public readonly jwt: ConfigType<typeof jwtConfig>,
我们就可以使用 this.config.jwt.xx
来使用了,这个 xx 会有类型提示和校验,可以很好的帮助我们获取系统的配置。并且可以极大程度的避免因为写错单词导致的问题!
清理代码
使用命令创建的 captcha 模块会有 entity、controller 和 dto,这里我们用不到可以将其删除。