(二)NestJS 环境变量使用

1,493 阅读1分钟

示例工程 GitHub

1 引入ConfigModule

工程创建好了之后,我们可以先使用 ConfigModule. 使用ConfigModule 加载环境配置文件.env,这样我们可以在工程刚开发时就预先留处的环境变量的位置,方便后续开发,减少部署时再修改造成的风险。环境变量包括运行端口号,数据库相关配置,公共变量,或者密钥或token等。

npm i --save @nestjs/config
# or
yarn add  @nestjs/config

安装好依赖之后,在 app.module 中引入,代码如下

// src/app.module.tsimport { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
​
@Module({
  imports: [ConfigModule.forRoot()], // 新增代码在这里
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

默认加载工程根目录下的.env文件,也可以加载指定文件,通常我会选择指定文件。

// src/app.module.ts
...
​
@Module({
  imports: [ConfigModule.forRoot({
     envFilePath: '.env.development',
  })],
  ...
})
​
 ...

image-20230628155439710.png

2 使用环境变量

变量使用就很简单,以修改默认端口为例, 如果没启动configmuodle,即使存在.env 文件也无法使用环境变量,会看到打印出undefined。如果环境变量内有修改,需要重新运行工程才会

// src/main.tsimport { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
​
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
​
  console.log(process.env.APP_PORT);  // 打印端口 APP_PORT
  await app.listen(process.env.APP_PORT);
}
bootstrap();
​

image-20230628160007793.png

app.module 引入之后,其他功能模块也可以使用了。这是使用ConfigModule最简单的方式, nest 方法来实现引入更为复杂的配置对象,或者只引用部分的环境配置文件的变量,已经在功能模块中使用ConfigService的方式好得控制使用。大家可以参考文档 configuration 了解其用法之后决定。