Nest.js 环境变量配置

Nest.js 环境变量配置

前言,程序需要跑在不同环境下,所以就会需要不同的环境变量,例如生产环境,测试环境,不同环境的,里面变量也是一样的,比如说数据库的信息,端口号等等。配置不同的环境变量也是为了实现软编码,防止一些重要的参数泄漏

Nest 中最佳方案创建一个 ConfigModule,该 ConfigModule 公开一个 ConfigService ,在 ConfigService 加载特有环境的 .env 文件。 Nest 提供了 @nestjs/config 开箱即用的依赖包。

引自Nest.js 环境变量配置和序列化 – 淮城一只猫 (iiong.com)

01 安装

1
npm i @nestjs/config

02 配置

app.module.ts 中的 forRoot 静态方法配置环境变量 .env 解析:

1
2
3
4
5
6
7
import { Module } from '@nestjs/common'
import { ConfigModule } from '@nestjs/config'

@Module({
imports: [ConfigModule.forRoot()],
})
export class AppModule {}

同级src 新建 .env 文件:

1
2
3
4
5
DB_HOST=localhost
DB_PORT=3306
DB_USER=xxx
DB_PASSWORD=xxx
DB_DATABASE=xxxx
  • 按需引入 .module.ts 文件引入
1
2
3
4
5
// 在需要 *.module.ts 文件引入
@Module({
imports: [ConfigModule],
// ...
})
  • 全局引入

app.module.ts 全局引入

1
2
3
4
5
6
7
8
9
10
11
import configuration from './config/configuration'

@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [configuration],
}),
],
})
export class AppModule {}

03 读取配置

在需要用到配置地方,在构造函数注入使用:

1
2
3
import { ConfigService } from '@nestjs/config'

constructor(private configService: ConfigService) {}

使用配置:

1
2
const dbUser = this.configService.get<string>('DB_USER')
const dbHost = this.configService.get<string>('DB_HOST')