NestJS 多环境配置

250 阅读1分钟

官方地址 nest.nodejs.cn/techniques/…

环境配置 在任何一个框架中 都是不可或缺的 不管前端还是服务端

应用经常运行在不同的 environments。 根据环境,应使用不同的配置设置。

最简单的
yarn add @nestjs/config

app.module.ts

// 引入
import { ConfigModule } from '@nestjs/config'

@Module({
  imports: [
      //注册
      ConfigModule.forRoot({isGlobal:true}),
      DemoModule,
      UploadModule,
      GuardModule
   ],
  controllers: [AppController],
  providers: [AppService],
})

根目录创建.env文件

PORT=3306

USER_NAME="xiaozhang"

BASE_URL="127.0.0.1"

image.png

找个模块使用

image.png

guard.controller.ts

引入ConfigService

import { ConfigService } from '@nestjs/config'

然后我们可以使用标准构造函数注入来注入它:

constructor(private readonly config:ConfigService) {}

调用

  @Get('env')
  envTest(){
    return this.config.get('USER_NAME')+this.config.get('PORT')
  }

image.png

还有 .yml文件 命名空间之类的 可以在官网看一下
多环境配置
yarn add @nestjs/config cross-env
1. 新建env文件夹 env/index.ts env/dev.ts edn/prod.ts

image.png

dev.ts

export const DEV = {
    url:"localhost:3000"
}

prod.ts

export const PROD = {
    url:"https://www.baidu.com"
}

index.ts

import { DEV } from './dev';
import { PROD } from './PROD';

export default function () {
  const env = process.env.RUNNING_ENV;
  console.log("env",process.env);
  return env === 'dev' ? DEV : PROD;
}
2. 引入
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DemoModule } from './demo/demo.module';
import { UploadModule } from './upload/upload.module';
import { GuardModule } from './guard/guard.module';

//引入ConfigModule  env
import { ConfigModule } from '@nestjs/config';
import env from './env/index';

@Module({
  imports: [
    //注入
    ConfigModule.forRoot({ isGlobal: true, load: [env] }),
    DemoModule,
    UploadModule,
    GuardModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3.controller使用 同样的引入 注入
import { Controller, Get, Post, Body, Patch, Param, Delete,UseGuards,SetMetadata } from '@nestjs/common';
import { GuardService } from './guard.service';
import { CreateGuardDto } from './dto/create-guard.dto';
import { UpdateGuardDto } from './dto/update-guard.dto';
import { RoleGuard } from './role/role.guard'
import { Role,ReqUrl } from './role/role.decorator'
import { ApiTags,ApiOperation, ApiParam, ApiQuery } from '@nestjs/swagger';
import { ConfigService } from '@nestjs/config'

@Controller('guard')
// @UseGuards(RoleGuard)
@ApiTags("guard模块")
export class GuardController {
  constructor(private readonly config:ConfigService) {}
  
  @Get('env')
  envTest(){
    return this.config.get('url')
  }
}

4. package.json 命令

注入 dev 和 prod环境

"start:dev": "cross-env RUNNING_ENV=dev nest start --watch",
"start:prod": "cross-env RUNNING_ENV=prod node dist/main",
5. 启动 yarn start:dev

image.png

localhost:3000 对应 env.ts中的url
End