nest 配置分离

时间:2023-01-09 浏览:177 分类:NestJS

config配置分离,即将环境常亮提取出,统一放置.env 文件下管理。

使用方法

第一步:安装依赖

$ npm i --save @nestjs/config

第二步:模块中引入

// app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}


ConfigModule.forRoot 的配置参数有

ConfigModule.forRoot({    // 全局使用
  isGlobal: true,
});


ConfigModule.forRoot({    // 不想加载 .env 文件,而是想简单地从运行时环境访问环境变量
  ignoreEnvFile: true,    //(就像 OS shell 导出一样,如 export DATABASE_USER=test)
});


ConfigModule.forRoot({.   // 自定义env 文件路径
  envFilePath: ['.env.development.local', '.env.development'],    
});

第三步:配置.env 常量

DB_DATABASE='database'
DB_USERNAME='database'
DB_PASSWORD='this is password'
DB_HOST='127.0.0.1'
DB_PORT='3306'

第四步:ConfigService 引入

要从 ConfigService 访问配置值,我们首先需要注入 ConfigService。与任何提供者一样,我们需要将其包含模块 - ConfigModule ,并导入将使用它的模块(除非将传递给 ConfigModule.forRoot() 方法的选项对象中的 isGlobal 属性设置为 true,就不用导入ConfigModule)如下:

// user.module.ts
@Module({
  imports: [ConfigModule],
  // ...
})

然后将其注入到服务中

// user.service.ts
constructor(private configService: ConfigService) {}

如果已经设置了  isGlobal为 true,就可以不用上述过程,直接在service中引入:

// user.service.ts

import {ConfigService} from "@nestjs/config";

@Injectable()
export class UserService {
    constructor(
        private readonly configService: ConfigService,
    ) {}

    async index(req) {
        let url = this.configService.get('DB_DATABASE');   // 读取env中常量
        return {user: 'me'};
        
    }
    
}

自定义配置

第一步:自定义配置文件

// config/configuration.ts

export default () => ({
  port: parseInt(process.env.PORT, 10) || 3000,
  database: {
    host: process.env.DATABASE_HOST,
    port: parseInt(process.env.DATABASE_PORT, 10) || 5432
  }
});

第二步:将其引入模块

import configuration from './config/configuration';

@Module({
  imports: [
    ConfigModule.forRoot({
      load: [configuration],
    }),
  ],
})
export class AppModule {}