Appearance
自定义 ConfigService 获得更加友好的代码提示
使用@nestjs/config
模块时,我们得不到对应的代码提示,这时我们需要经常到.env
文件中查看对应的 key 值并复制过来。我们可以使用一个自定义的 servers 来实现代码提示。
使用命令生成 config 模块和 config 服务 nest new mo config
nest new s config
config.module.ts
ts
import { Global, Module } from '@nestjs/common'
import { ConfigModule as NestConfigModule } from '@nestjs/config'
import { ConfigService } from './config.service'
import configs from './data'
@Global()
@Module({
imports: [NestConfigModule.forRoot({ isGlobal: true, load: [...configs] })],
providers: [ConfigService],
exports: [ConfigService],
})
export class ConfigModule {}
config.service.ts
有一个配置项后就需要手动注入该配置项到
ConfigService
中
ts
import { Inject, Injectable } from '@nestjs/common'
import { ConfigType } from '@nestjs/config'
import { aliyunConfig } from './data/aliyun.config'
import { appConfig } from './data/app.config'
@Injectable()
export class ConfigService {
constructor(
@Inject(aliyunConfig.KEY) public aliyun: ConfigType<typeof aliyunConfig>,
@Inject(appConfig.KEY) public app: ConfigType<typeof appConfig>,
) {}
}
使用命名空间自定义配置文件
使用命名空间来定义配置文件,结合env
文件来实现代码提示。我这里将配置文件都放置于 config/data 文件夹中
这个 key 值就是使用时的 key
/src/config/data/aliyun.config.ts
ts
import { registerAs } from '@nestjs/config'
export const aliyunConfig = registerAs('aliyun', () => ({
access_key: process.env.ALIYUN_ACCESS_KEY || '',
access_secret: process.env.ALIYUN_ACCESS_SECRET || '',
sms_sign: process.env.ALIYUN_SMS_SIGN || '',
sms_code_template: process.env.ALIYUN_SMS_CODE_TEMPLATE || '',
test_phone: process.env.ALIYUN_SMS_TEST_PHONE || '',
}))
/src/config/data/app.config.ts
ts
import { registerAs } from '@nestjs/config'
export const appConfig = registerAs('app', () => ({
name: 'test_name',
}))
/src/config/data/index.ts
ts
import {aliyunConfig} from './aliyun.config'
import {appConfig} from './app.config'
export [aliyunConfig, appConfig]
使用示例
使用时我们需要在对应的地方注入自定义的 ConfigService
ts
import { ConfigService } from './config/config.service'
class xxService {
constructor(private readonly config: ConfigService) {}
// 示例
getConfig(): string {
return this.config.aliyun.access_key + this.config.app.name
}
}
我们也可以继续使用@nestjs/config 的方式来读取配置文件
ts
import { ConfigService } from '@nestjs/config'
class xxService {
constructor(private readonly config: ConfigService) {}
// 示例
getConfig(): string {
return this.config.get('ALIYUN_ACCESS_KEY')
}
}