Nest环境变量读取异常:Redis模块中ConfigService返回undefined
解决Redis模块无法读取.env.local环境变量的问题
问题核心在于模块导入顺序错误:当前代码中redisModuleFactory先于ConfigModule.forRoot被导入,NestJS按导入顺序初始化模块,此时ConfigService还未加载.env文件的配置,导致读取REDIS_HOST和REDIS_PORT返回undefined。
修正后的代码
const redisModuleFactory = CacheModule.registerAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService) => ({ store: redisStore, host: configService.get('REDIS_HOST'), port: configService.get('REDIS_PORT'), }), inject: [ConfigService], }); @Module({ imports: [ // 优先初始化ConfigModule,确保配置先加载完成 ConfigModule.forRoot({ envFilePath: `.env.${process.env.NODE_ENV}`, }), redisModuleFactory, ], controllers: [AppController], // 无需手动声明ConfigService,ConfigModule.forRoot已自动提供该服务 }) export class AppModule {}
额外检查项
- 确认
process.env.NODE_ENV的值为local,确保加载的是.env.local文件 - 检查
.env.local是否放在项目根目录,变量名REDIS_HOST、REDIS_PORT拼写正确(环境变量名大小写敏感) - 验证
.env.local内的变量格式,比如REDIS_HOST=localhost,无多余空格或引号
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

