当前位置: 首页 > news >正文

nestjs配置@nestjs/config 入门教程

1. 安装与基础配置

1.1 安装依赖

npm install @nestjs/config

1.2 根模块配置

app.module.ts 中导入并配置 ConfigModule

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';@Module({imports: [ConfigModule.forRoot({isGlobal: true,       // 全局可用,无需在子模块重复导入envFilePath: '.env',  // 指定环境文件路径}),],
})
export class AppModule {}

2. 创建 .env 文件

在项目根目录创建 .env 文件,定义环境变量:

DATABASE_HOST=localhost
DATABASE_PORT=5432
JWT_SECRET=my_secure_secret

3. 访问配置

3.1 注入 ConfigService

在服务或控制器中注入 ConfigService 并获取配置:

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';@Injectable()
export class DatabaseService {constructor(private configService: ConfigService) {}getConnection() {return {host: this.configService.get('DATABASE_HOST'),port: this.configService.get<number>('DATABASE_PORT'),};}
}

4. 类型安全配置

4.1 定义配置接口

创建 config.interface.ts 定义配置结构:

export interface DatabaseConfig {host: string;port: number;
}export interface AppConfig {jwtSecret: string;database: DatabaseConfig;
}

4.2 加载配置

ConfigModule 中加载配置:

ConfigModule.forRoot({load: [() => ({jwtSecret: process.env.JWT_SECRET,database: {host: process.env.DATABASE_HOST,port: parseInt(process.env.DATABASE_PORT),},})],
});

5. 配置验证

5.1 安装 Joi

npm install joi

5.2 定义验证模式

创建 validation.schema.ts

import * as Joi from 'joi';export const validationSchema = Joi.object({JWT_SECRET: Joi.string().required(),DATABASE_HOST: Joi.string().required(),DATABASE_PORT: Joi.number().required().default(5432),
});

5.3 应用验证

ConfigModule 中启用验证:

ConfigModule.forRoot({validationSchema,validationOptions: {abortEarly: false, // 显示所有错误},
});

6. 多环境配置

6.1 创建环境文件

  • .env.development
  • .env.production
  • .env.test

6.2 动态加载环境文件

ConfigModule.forRoot({envFilePath: `.env.${process.env.NODE_ENV || 'development'}`,
});

6.3 指定环境启动

package.json 中配置脚本:

"scripts": {"start:dev": "cross-env NODE_ENV=development nest start --watch","start:prod": "cross-env NODE_ENV=production node dist/main"
}

7. 嵌套配置与命名空间

7.1 使用 registerAs

创建 database.config.ts

import { registerAs } from '@nestjs/config';export default registerAs('database', () => ({host: process.env.DATABASE_HOST,port: parseInt(process.env.DATABASE_PORT),
}));

7.2 加载并访问嵌套配置

ConfigModule.forRoot({load: [databaseConfig],
});// 在服务中访问
this.configService.get('database.host');

8. 最佳实践

8.1 安全建议

  • .env 文件加入 .gitignore
  • 生产环境使用秘密管理工具(如 AWS Secrets Manager)。

8.2 变量命名

  • 全大写加下划线(如 STRIPE_API_KEY)。
  • 按功能分组(数据库、第三方服务等)。

8.3 类型安全

  • 数字类型使用 parseIntparseFloat
  • 布尔值使用 process.env.VAR === 'true'

8.4 默认值处理

this.configService.getOrThrow('REQUIRED_VAR');
this.configService.get('OPTIONAL_VAR', { infer: true }) ?? 'default';

9. 完整示例

9.1 项目结构

├── src
│   ├── config
│   │   ├── database.config.ts
│   │   └── validation.schema.ts
│   ├── app.module.ts
│   └── main.ts
├── .env
├── .env.development
└── .env.production

9.2 main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';async function bootstrap() {const app = await NestFactory.create(AppModule);const configService = app.get(ConfigService);console.log(`Application running on port ${configService.get('PORT')}`);await app.listen(configService.get('PORT') || 3000);
}
bootstrap();

通过以上步骤,您可以系统地管理和配置 NestJS 应用程序的环境变量,确保代码的健壮性和可维护性。

http://www.dtcms.com/a/337970.html

相关文章:

  • 股票常见K线
  • 群晖nas中 打开PHP连接MariaDB 功能扩展
  • JavaSE——高级篇
  • 处理手表步数和分析用户步数数据
  • 【Tech Arch】Spark为何成为大数据引擎之王
  • 电子电气架构 --- 关于整车信息安全的一些思考
  • 2025年- H98-Lc206--51.N皇后(回溯)--Java版
  • CC攻击的安全防护方案
  • MySQL索引设计:高效查询与资源平衡指南
  • Deep Plug-And-Play Super-Resolution for Arbitrary Blur Kernels论文阅读
  • Spring Cloud LoadBalancer 最佳实践
  • PyQt流程
  • Prompt engineering(PE) —— prompt 优化如何进行?
  • 基于 PaddleDetection实现目标算法识别
  • 最终版,作者可能不再维护!
  • QNX 性能分析工具(hogs pidin tracelogger)
  • 44.安卓逆向2-补环境-使用unidbg(手动补环境)
  • JavaScript Array.prototype.at ():数组任意位置取值的新姿势
  • ReactNative开发实战——React Native开发环境配置指南
  • 使用 mdadm 创建 RAID 10(4块磁盘)
  • Buttercup:开源人工智能驱动系统检测并修补漏洞
  • React native 使用 JSI 库 实现 C++和JS互通
  • 设计模式之汇总
  • CNN-BiLSTM-Attention、CNN-BiLSTM、BiLSTM三模型多变量时序光伏功率预测
  • 物联网智能边缘架构:流数据处理与设备管理的协同优化
  • PHP如何利用GD库函数生成图片验证码?
  • 在Excel启动时直接打开多个Excel文件
  • golang读写锁和互斥锁的区别
  • 理解AQS的原理并学习源码
  • MongoDB新手教学