0


一篇文章掌握如何在 NestJS 中安全高效的管理 Config 全局配置文件

前言

应用程序通常需要在多种环境中运行,比如本地开发环境、测试环境和生产环境。在不同的环境中,我们通常需要采用不同的配置设置。举个例子,本地环境可能需要一个特定的数据库凭据,而生产环境则使用另一组完全不同的数据库凭据。由于这些配置变量频繁地改变,因此最佳实践是将它们存在环境变量中。

在Node.js中,外部定义的环境变量可以通过

process.env

全局变量来访问。一种可能的做法是在每个环境中设置不同的环境变量,然而这样做在管理上变得越来越复杂,特别是在需要频繁模拟或更改这些值的开发和测试环境中。

一个常见的做法是使用

.env

文件来管理配置,在这个文件中包含了一系列的键值对,每个键代表一个特定的环境变量。在不同的环境中运行应用程序只需要切换对应的

.env

文件即可。

配置模块

对于NestJS框架,我们可以利用

ConfigModule

来实现上述的配置管理方式。

ConfigModule

包含一个

ConfigService

,该服务可以根据

$NODE_ENV

环境变量来加载相应的

.env

文件。为了简化使用,NestJS提供了一个开箱即用的

@nestjs/config

包。

在接下来的文章中,我们将详细介绍如何在NestJS中使用

@nestjs/config

包来实现安全、灵活的配置管理。

基础使用步骤

1. 安装依赖包

使用 npm 安装 config 模块和@nestjs/config模块。


npm install config @nestjs/config

2. 创建配置文件

在你的项目根目录下创建一个名为

config

的文件夹,并在该文件夹下面新建一些

.ts

.json

的配置文件,比如

database.ts

,内容可以为:

exportdefault{
    host: process.env.DATABASE_HOST,
    port:parseInt(process.env.DATABASE_PORT,3306),};

这样,我们的敏感信息就被保存在了环境变量中,不会暴露在代码中。

3. 引入模块

在项目的 app.module.ts 文件中引入

ConfigModule

import{ Module }from'@nestjs/common';import{ ConfigModule }from'@nestjs/config';import databaseConfig from'./config/database';@Module({
  imports:[
    ConfigModule.forRoot({
      load:[databaseConfig],}),],...})exportclassAppModule{}

4. 使用配置

可以在任何需要的地方注入

ConfigService

来访问这些配置值:

import{ Injectable }from'@nestjs/common';import{ ConfigService }from'@nestjs/config';@Injectable()exportclassAppService{constructor(private configService: ConfigService){}getDatabaseHost():string{returnthis.configService.get<string>('database.host');}}

其他模块使用配置

在使用像TypeORM这样的模块时,我们需要设置很多配置项,例如数据库连接信息。这些信息通常会根据环境的不同而更改。在这种情况下,我们可以使用Config模块来管理和使用这些配置。

1. 安装TypeORM和Config模块

需要提前 先安装TypeORM和Config模块的依赖包

npm install @nestjs/typeorm typeorm @nestjs/config

2. 创建配置文件

接着在config文件夹中创建一个名为

typeorm.ts

的文件,用于存放数据库连接的配置。

exportdefault{
    type:        process.env.DB_TYPE,
    host:        process.env.DB_HOST,
    port:parseInt(process.env.DB_PORT,10),
    username:    process.env.DB_USERNAME,
    password:    process.env.DB_PASSWORD,
    database:    process.env.DB_DATABASE,
    synchronize: process.env.DB_SYNCHRONIZE==='true',};

3. 引入模块并配置TypeORM

在app.module.ts文件中,需要引入

TypeOrmModule

ConfigModule

并进行配置。

接下来使用了

forRootAsync

方法来异步配置TypeORM。

useFactory

函数使我们可以从注入的

ConfigService

中直接获取

typeorm

配置。

import{ Module }from'@nestjs/common';import{ ConfigModule, ConfigService }from'@nestjs/config';import{ TypeOrmModule }from'@nestjs/typeorm';import databaseConfig from'./config/database';import typeOrmConfig from'./config/typeorm';@Module({
  imports:[
    ConfigModule.forRoot({
      load:[databaseConfig, typeOrmConfig],}),
    TypeOrmModule.forRootAsync({
      imports:[ConfigModule],
      inject:[ConfigService],useFactory:(configService: ConfigService)=> configService.get('typeorm'),}),],})exportclassAppModule{}

总结

使用config模块来处理配置能够让我们更好地管理和保护程序中的敏感信息,同时也为我们提供了在不同环境中切换配置的可能。同时在其他成熟的Module模块中也会通过注入ConfigModule,然后在全局Config配置中获取需要的信息。

标签: 安全 nestjs node.js

本文转载自: https://blog.csdn.net/m0_37890289/article/details/135299503
版权归原作者 乐闻x 所有, 如有侵权,请联系我们删除。

“一篇文章掌握如何在 NestJS 中安全高效的管理 Config 全局配置文件”的评论:

还没有评论