Skip to content

通过环境变量获取配置信息

通过环境变量获取配置信息#

前面在配置MySQL和JWT的时候,我们把一些字符串信息硬编码到代码中了,然而生成环境中并不推荐这么做,而是应该使用环境变量或者配置服务来管理,因此,我们可以在项目根目录下创建一个.env文件来维护环境变量

DB_USER=root
DB_HOST=localhost
DB_PORT=3306
DB_PASSWORD=123456
DB_DATABASE=login_test
JWT_SECRET=MySecret
JWT_EXPIRE_TIME=7d

要获取配置信息,还需要安装@nestjs/config

Terminal window
pnpm add @nestjs/config -S

并且,在AppModule中需要引入ConfigModule模块,而且最好将配置模块直接注入全局:

import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
]
//......
})

为了获取配置信息,我们需要把TypeORM模块改成工厂函数的方式进行注册,并且需要**注入ConfigService**获取配置信息

TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
type: 'mysql',
host: configService.get<string>('DB_HOST'),
port: configService.get<number>('DB_PORT'),
username: configService.get<string>('DB_USER'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_DATABASE'),
synchronize: true,
logging: true,
autoLoadEntities: true,
entities: [__dirname + '/**/*.entity{.ts,.js}'],
timezone: 'Z',
}),
}),

注意:TypeOrmModule.forRootAsync需要至少Node20以上的版本。

我们在Auth模块中,动态引入Jwt

JwtModule.registerAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: (configService: ConfigService) => ({
secret: configService.get<string>('JWT_SECRET'),
signOptions: {
expiresIn: configService.get<string>('JWT_EXPIRE_TIME'),
},
}),
}),