第7章 nestjs服务端开发:通用业务框架设计
全盘思路:项目分析与Nestjs核心概念深入理解
https://www.bilibili.com/video/BV1LT421S7qD
官方方案:使用config设置配置模块
一、基础配置与全局注册
1. 安装依赖
pnpm install @nestjs/config dotenvpnpm i cross-env -D
核心包:@nestjs/config提供配置管理能力,dotenv用于加载 .env文件
2. 根模块注册
在 app.module.ts中全局注册配置模块:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';@Module({imports: [ ConfigModule.forRoot({isGlobal: true, // 全局可用,子模块无需重复导入envFilePath: '.env', // 默认环境文件路径})]
})
export class AppModule {}
关键参数:
-
isGlobal: true:使配置服务全局可注入。 -
envFilePath:支持多环境配置文件(如.env.development)
二、多环境配置支持
1. 环境文件划分
创建不同环境的配置文件:
.env.development # 开发环境
.env.production # 生产环境
.env.test # 测试环境
修改 package.json 文件
通过
NODE_ENV指定环境(需配合cross-env实现跨平台兼容)
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:prod": "cross-env NODE_ENV=production node dist/main"
动态加载:
ConfigModule.forRoot({envFilePath: `.env.${process.env.NODE_ENV || 'development'}`,
})
官方方案进阶:增加环境变量、yaml文件读取
官方方案进阶:嵌套配置yaml文件读取
安装与配置 YAML 解析
首先安装 YAML 解析库:
pnpm add js-yaml
pnpm add -D @types/js-yaml
创建 YAML 配置文件,例如 config/config.yml(基础配置)和 config/config.development.yml(环境特定配置)
# config/config.yml (基础配置)
http:port: 3000
db:postgres:host: localhostdatabase: myapp# config/config.development.yml (开发环境配置)
db:postgres:database: myapp_devredis:host: redis.local
创建配置文件加载器 src/config/configuration.ts
import { readFileSync } from 'fs';
import * as yaml from 'js-yaml';
import { join } from 'path';
import { merge } from 'lodash';const baseConfig = yaml.load(readFileSync(join(__dirname, '../../config/config.yml'), 'utf8'));
const env = process.env.NODE_ENV || 'development';
const envConfigPath = join(__dirname, `../../config/config.${env}.yml`);
const envConfig = yaml.load(readFileSync(envConfigPath, 'utf8'));export default () => merge(baseConfig, envConfig); // 环境配置会覆盖基础配置
在 app.module.ts中注册 YAML 配置
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import configuration from './config/configuration';@Module({imports: [ConfigModule.forRoot({isGlobal: true,load: [configuration], // 加载 YAML 配置}),],
})
export class AppModule {}
使用嵌套的 YAML 配置
通过 ConfigService可以使用点符号访问嵌套的 YAML 配置
@Injectable()
export class AppService {constructor(private configService: ConfigService) {}getDatabaseConfig() {const dbConfig = this.configService.get('db.postgres');console.log(dbConfig.host); // 访问嵌套属性return this.configService.get('http.port');}
}
第三方库config读取json文件配置
https://blog.csdn.net/weixin_47121832/article/details/137082090
