NestJS中不同环境的切换

Published on
46
https://nest.nodejs.cn/techniques/configuration

比如在开发环境下连接开发环境数据库,生产环境下连接生产环境的数据库。

1.安装cross-env模块

npm i cross-env

2.在package.json中写入响应的环境变量

"scripts": {
    "build": "cross-env NODE_ENV=production nest build --webpack",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "cross-env NODE_ENV=development nest start --watch",
    "start:debug": "cross-env NODE_ENV=development nest start --debug --watch",
    "start:prod": "cross-env NO_COLOR=true NODE_ENV=production node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },

3.安装@nestjs/config

npm i --save @nestjs/config

4.新建env文件

//在项目根目录下新建文件
//.env 优先级最低 可以被覆盖 在线上环境可能需要

//.env.development 开发环境下的数据库或者别的配置
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=123456
DATABASE_NAME=wxdb

//.env.production 生产环境下的配置 如果线下不需要连接生产环境则不需要建
DATABASE_HOST=123.123.12.32
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=XTEdYNSWDTp6KaX4125478LLkk
DATABASE_NAME=wxdb

5.app.module.ts 里面导入不同环境的配置

import { ConfigService, ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: [`.env.${process.env.NODE_ENV}`, '.env'], //根据环境变量加载响应配置文件
    }),
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => ({
        type: 'mysql',
        host: configService.get<string>('DATABASE_HOST'),
        port: configService.get<number>('DATABASE_PORT'),
        username: configService.get<string>('DATABASE_USER'),
        password: configService.get<string>('DATABASE_PASSWORD'),
        database: configService.get<string>('DATABASE_NAME'),
        entities: [sysRole, sysJurisdiction],
        synchronize: true, // 不要在生产环境中使用 synchronize
        logging: false, // 打印sql
      }),
      inject: [ConfigService],
    }),
    SystemModule,
    ToolsModule,
  ]
})
export class AppModule {}

6.如果没有报错的话 就可以啦


Prev Post Vue-Router中Query传值简单加密
Next Post 生产环境中的nest-winston关闭控制台颜色