Moh*_*waj 23 javascript environment-variables node.js nestjs dotenv
我正在开发我的第一个 NestJS 应用程序,它在app.module.ts
.
但是根据我们的要求,我不得不从环境文件中选择数据库配置值。为此,我遵循了 nestjs 文档网站上的配置文档 - https://docs.nestjs.com/techniques/configuration
但问题是我需要在同一个文件中使用 .env 变量进行数据库连接,这是失败的。
这是我运行良好的原始代码:
@Module({
imports: [
MongooseModule.forRoot(`mongodb+srv://myusername:mypassword@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud)
现在,我想从.ENV文件,这是喜欢挑选那些DB值local.env
,dev.env
取决于环境等。现在,我的这段代码不起作用:
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
MongooseModule.forRoot(`mongodb+srv://${ConfigModule.get('DB_USER')}:${ConfigModule.get('DB_PASS')}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud)
kos*_*kMD 32
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.get<string>('MONGODB_URI'),
}),
inject: [ConfigService],
});
Run Code Online (Sandbox Code Playgroud)
swe*_*218 21
从这里的 Nestjs 文档 - https://docs.nestjs.com/techniques/configuration
这些步骤适用于 MySQL 和 TypeORM。
安装 Nestjs 配置模块 - npm i --save @nestjs/config
. 它依赖于 dotenv
在您的根文件夹中创建一个 .env 文件并添加您的键/值对,例如 DATABASE_USER=myusername
打开 app.module.ts 并导入配置模块
从'@nestjs/config' 导入 { ConfigModule };
将以下行添加到 app.module.ts 的导入部分。我将其添加为第一次导入。它将自动加载 .env 文件的内容。
ConfigModule.forRoot(),
然后,您可以按照数据库配置部分中通常的 process.env.<variable_name> 开始使用 env 变量,例如
process.env.DATABASE_USER
有关 ConfigModule 的更多配置,请参阅上面的链接。您可以使用自定义文件/路径并将模块设置为全局可见。
top*_*oon 20
1. 继续使用 ConfigModule
您需要NODE_ENV
在 npm 脚本中进行设置,以便它可以用于基于 env 加载一个 env 文件。
"scripts": {
"start:local": "NODE_ENV=local npm run start"
"start:dev": "NODE_ENV=dev npm run start"
}
Run Code Online (Sandbox Code Playgroud)
现在你可以只使用ConfigModule
:
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
MongooseModule.forRoot(`mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' })
...
})
Run Code Online (Sandbox Code Playgroud)
2. 使用 dotenv
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
MongooseModule.forRoot(`mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' })
...
})
Run Code Online (Sandbox Code Playgroud)
向您添加一些脚本以package.json
设置您所在的环境。
npm install dotenv
Run Code Online (Sandbox Code Playgroud)
dotenv
在main.ts
文件中导入。确保在文件顶部执行此操作。
"scripts": {
...
"start:local": "NODE_ENV=local npm run start"
"start:dev": "NODE_ENV=dev npm run start"
}
Run Code Online (Sandbox Code Playgroud)
3. 使用 env-cmd
您可以使用env-cmd
npm 包。
require('dotenv').config({ path: `../${process.env.NODE_ENV}.env` });
Run Code Online (Sandbox Code Playgroud)
并在 中为不同的环境添加一些命令package.json
,例如:
npm install env-cmd
Run Code Online (Sandbox Code Playgroud)
现在您可以使用 env 变量,例如:
"scripts": {
...
"start:local": "env-cmd -f local.env npm run start"
"start:dev": "env-cmd -f dev.env npm run start"
}
...
Run Code Online (Sandbox Code Playgroud)
process.env.MONGO_CONNECTION_STRING
小智 11
通过使用 nestjs/config 包:
npm 安装 @nestjs/config
安装包后,在app模块(app.module.ts文件)中:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [ConfigModule.forRoot()],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
之后 .env 文件可以在整个应用程序中访问。假设您的 .env 文件如下所示。
DB_USER=mohit
Run Code Online (Sandbox Code Playgroud)
访问 DB_USER 变量使用 process.env.DB_USER
您需要使用MongooseModule.forRootAsync(() => {...})
代替MongooseModule.forRoot(...)
这使得 MongooseModule 等待其 IOC 依赖项。
请参阅:https : //docs.nestjs.com/techniques/mongodb#async-configuration
归档时间: |
|
查看次数: |
24214 次 |
最近记录: |