Nestjs中利用nestjs-config模块实现多运行环境配置

1. 问题

在做 Nestjs 开发时,会涉及开发环境、生产环境等切换,可以通过nestjs-config进行配置文件统一管理,通过向启动命令传参的方式运行不同环境下的 Nest 应用。

2. 解决思路 1

2.1. 使用 nest-cli 搭建脚手架

  1. 创建项目
nest new multi-config
npm install
  1. 使用 Git 做版本管理
git init
git add .
git commit -m 'init'
  1. 测试脚手架
npm run start

  1. curl 127.0.01:3000

得到结果

Hello World!

2.2. 安装并配置 nestjs-config

  1. 安装 nestjs-config
npm install --save
  1. 创建配置文件
    src/config/environment.ts,新增两个模式(此处为数据库配置,可根据业务增删)
export default {
  development: {
    currentMode: '开发模式',
    database: {
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: '123456',
      database: 'db',
      entities: [join(__dirname, '../', '**/**.entity{.ts,.js}')],
      synchronize: false, //如果为true的话,会同步数据库,不建议打开
      timezone: '+08:00',
    },
  },
  production: {
    currentMode: '生产模式',
    database: {
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: '123456',
      database: 'db',
      entities: [join(__dirname, '../', '**/**.entity{.ts,.js}')],
      synchronize: false, //如果为true的话,会同步数据库,不建议打开
      timezone: '+08:00',
    },
  },
  currentEnv:function(){
    let ret = {};
    if (!ENV) {
      ret = module.exports.default.development;
    } else {
      ret = module.exports.default[ENV];
    }
    return ret;
  }
};

  1. 在 Nest 应用中配置模块
    app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from 'nestjs-config';
import { resolve } from 'path';

const ENV = process.env.NODE_ENV;

@Module({
  imports: [
    ConfigModule.load(resolve(__dirname, 'config', '**/!(*.d).{ts,js}')),],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

  1. 引用模块
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { ConfigService } from 'nestjs-config';

const ENV = process.env.NODE_ENV;
@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    private readonly config: ConfigService,
  ) {
    let ret = this.config.get('environment.currentEnv');

    console.log(ret());
  }

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}
  1. 使用指令启动不同的变量
  • npm run start
[Nest] 93694  - 2022/06/02      LOG [InstanceLoader] ConfigModule dependencies initialized +28ms
{
  currentMode: '开发模式',
  database: {
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    username: 'root',
    password: '123456',
    database: 'db',
    synchronize: false,
    timezone: '+08:00'
  }
}
  • NODE_ENV=production npm run start
[Nest] 94977  - 2022/06/02      LOG [InstanceLoader] ConfigModule dependencies initialized +29ms
{
  currentMode: '生产模式',
  database: {
    type: 'mysql',
    host: 'localhost',
    port: 3306,
    username: 'root',
    password: '123456',
    database: 'db',
    synchronize: false,
    timezone: '+08:00'
  }
}

3. 解决思路 2

将配置文件分别以文件存放,根据环境变量加载不同的配置文件,可参考如下文章:
Nest: 配置变量集,也就是全局变量

4. 引申

nest 中文教程
nestjs-config

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值