前言在使用Typeorm一章中,我们直接将数据库连接信息写在app.module.ts中,但在实际开发中,会根据环境变量加载不同的配置项。有些配置信息不会直接写在代码中。为此,nest官方提供了@nestjs/config模块来满足上述需求。1.从.env文件加载环境变量@nestjs/config依赖dotenv,可以通过key=value的形式配置环境变量,项目默认会加载根目录下的.env文件,我们只需要引入ConfigModule在app.module.ts中,然后使用ConfigModule.forRoot()方法。.envDB_HOST=localhostDB_PORT=3306DB_USERNAME=rootDB_PASSWORD=rootDB_NAME=blogssrc/app.module.tsimport{Module}from'@nestjs/common';import{ConfigModule}from'@nestjs/config';@Module({imports:[ConfigModule.forRoot(),TypeOrmModule.forRootAsync({useFactory:()=>({type:'mysql',host:process.env.DB_HOST,port:process.env.DB_PORT,username:process.env.DB_USERNAME,password:process.env.DB_PASSWORD,数据库:process.env.DB_NAME,时区:'UTC',字符集:'utf8mb4',实体:['./**/*.entity.js'],同步:true,日志记录:true,})})],//也可以使用自定义.env文件/*imports:[ConfigModule.forRoot({envFilePath:'.development.env',})];*/})exportclassAppModule{}2.加载自定义配置文件上面我们把所有的数据库信息都写在环境变量里,然后通过process.env.key的形式获取,但是可能会有如下需求:development.ts和test.ts存在于config文件夹,production.ts三个配置文件,需要根据NODE_ENV加载不同的配置文件;另外,需要一个更具扩展性的配置文件格式支持,比如.ts、.js文件,这时候可以使用数据库配置项等作为一个对象,不仅仅是key=value的格式,还可以添加注释,说明等。接下来我们在config文件夹下添加配置文件,修改app.module.ts文件和数据库信息等移动到配置文件。添加src/config/development.tsexportdefault{//端口port:parseInt(process.env.PORT,10)||3000,//是否启用swaggerenableSwagger:true,//数据库配置DATABASE_CONFIG:{type:'mysql',host:'localhost',port:3306,username:'root',password:'',database:'blogs',timezone:'UTC',charset:'utf8mb4',entities:['./**/*.entity.js'],synchronize:true,logging:true,},};添加src/config/index.tsimportdevelopmentConfigfrom'./development';importtestConfigfrom'./test';importproductionConfigfrom'./production';constconfigs={development:developmentConfig,test:testConfig,production:productionConfig,};constenv=process.env.NODE_ENV||'development';exportdefault()=>configs[env];修改src/app.module.tsimport{Module}from'@nestjs/common';import{AppController}from'./app.controller';import{AppService}来自'./app.service';导入t{TypeOrmModule}from'@nestjs/typeorm';import{ArticleModule}from'./controllers/admin/article/article.module';import{ConfigModule,ConfigService}from'@nestjs/config';importcustomConfigfrom'./config';@Module({imports:[ConfigModule.forRoot({isGlobal:true,//作用于全局load:[customConfig],//加载自定义配置项}),TypeOrmModule.forRootAsync({imports:[ConfigModule],//数据库配置项依赖ConfigModule,所以这里需要引入useFactory:(configService:ConfigService)=>configService.get('DATABASE_CONFIG'),inject:[ConfigService],//记得注入服务,否则在useFactory函数中获取LessthanConfigService}),ArticleModule,],controllers:[AppController],providers:[AppService],})exportclassAppModule{}根据官方文档配置和自己的需求,目前实现以上表格,如果你有更多好的做法欢迎分享
