通过环境变量获取配置信息#
前面在配置MySQL和JWT的时候,我们把一些字符串信息硬编码到代码中了,然而生成环境中并不推荐这么做,而是应该使用环境变量或者配置服务来管理,因此,我们可以在项目根目录下创建一个.env文件来维护环境变量
DB_USER=rootDB_HOST=localhostDB_PORT=3306DB_PASSWORD=123456DB_DATABASE=login_testJWT_SECRET=MySecretJWT_EXPIRE_TIME=7d要获取配置信息,还需要安装@nestjs/config包
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'), }, }),}),