配置
存储配置变量
由于配置变量的变化,最佳实践是在环境中存储配置变量。
外部定义的环境变量可以通过process.env全局变量在 Node.js 中可见。 我们可以通过在每个环境中分别设置环境变量来尝试解决多个环境的问题。 这很快就会变得笨拙不堪,特别是在开发和测试环境中,这些值需要很容易地被模仿和/或更改。 在 Node.js 应用程序中,通常使用.env文件,保存键-值对,其中每个键代表一个特定的值,以表示每个环境。
在不同的环境中运行应用程序只是交换正确的.env文件的问题。
在 Nest 中使用这种技术的一个好方法是创建一个ConfigModule来公开一个ConfigService来加载适当的env文件。 虽然你可以选择自己编写这样一个模块,但为了方便起见,Nest 提供了现成的@nestjs/config包。
安装
npm i --save @nestjs/config开始
一旦安装过程完成,我们可以导入ConfigModule。 通常,我们会把它导入根模块 AppModule,并使用静态方法forRoot()来控制它的行为。 在此步骤中,将解析和解决环境变量键/值对。 稍后,我们将在其他特性模块中看到访问ConfigModule类的ConfigService类的几个选项。
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot()],
})
export class AppModule {}自定义环境文件路径¶
默认情况下,包会在应用程序的根目录中查找.env文件。 要为.env文件指定另一个路径,请设置传递给forRoot()的(可选)选项对象的envFilePath属性,如下所示:
ConfigModule.forRoot({
envFilePath: '.development.env',
});你也可以像这样为.env文件指定多个路径:
ConfigModule.forRoot({
envFilePath: ['.env.development.local', '.env.development'],
});如果在多个文件中找到一个变量,则第一个变量优先。
在全局范围内使用模块
当你想在其他模块中使用ConfigModule时,你需要导入它(这是任何 Nest 模块的标准配置)。 或者,通过设置 options 对象的isGlobal属性为true,将其声明为global 模块,如下所示。 在这种情况下,一旦 ConfigModule 被加载到根模块中(例如,AppModule),你就不需要在其他模块中导入它了。
ConfigModule.forRoot({
isGlobal: true,
});