5 回答
TA贡献1776条经验 获得超12个赞
从这里的 Nestjs 文档 - https://docs.nestjs.com/techniques/configuration
这些步骤对我适用于 MySQL 和 TypeORM。
安装 Nestjs 配置模块 -
npm i --save @nestjs/config
. 它依赖于dotenv.env
在您的根文件夹中创建一个文件并添加您的键/值对,例如DATABASE_USER=myusername
打开 app.module.ts 并导入配置模块
import { ConfigModule } from '@nestjs/config';
将以下行添加到 的导入部分
app.module.ts
。我将它添加为第一次导入。它会自动加载 .env 文件的内容。
ConfigModule.forRoot(),
然后,您可以按照数据库配置部分中的常规 process.env.<variable_name> 开始使用环境变量,例如
process.env.DATABASE_USER
有关 ConfigModule 的更多配置,请参见上面的链接。您可以使用自定义文件/路径并将模块设置为全局可见。
TA贡献1829条经验 获得超4个赞
1.继续使用ConfigModule
您需要NODE_ENV在 npm scripts 中设置,以便它可以用于根据 env 加载 env 文件。
"scripts": {
"start:local": "NODE_ENV=local npm run start"
"start:dev": "NODE_ENV=dev npm run start"
}
现在你可以使用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' })
...
})
2.使用dotenv
npm install dotenv
向您添加一些脚本以package.json设置您所在的环境。
"scripts": {
...
"start:local": "NODE_ENV=local npm run start"
"start:dev": "NODE_ENV=dev npm run start"
}
dotenv在main.ts文件中导入。确保在文件顶部执行此操作。
require('dotenv').config({ path: `../${process.env.NODE_ENV}.env` });
3.使用env-cmd
你可以使用env-cmdnpm 包。
npm install env-cmd
并在 中添加一些针对不同环境的命令package.json,例如:
"scripts": {
...
"start:local": "env-cmd -f local.env npm run start"
"start:dev": "env-cmd -f dev.env npm run start"
}
...
现在您可以使用环境变量,例如:
MongooseModule.forRoot(`mongodb+srv://${process.env.DB_USER}:${process.env.DB_PASS}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' })
process.env.MONGO_CONNECTION_STRING
更新:
为了克服不同平台的 env set 命令问题,您可以安装cross-envpackage.
npm install -D cross-env
并更新脚本:
"scripts": {
"start:local": "cross-env NODE_ENV=local npm run start"
"start:dev": "cross-env NODE_ENV=dev npm run start"
}
TA贡献1851条经验 获得超5个赞
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.get<string>('MONGODB_URI'),
}),
inject: [ConfigService],
});
TA贡献1820条经验 获得超10个赞
通过使用 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 {}
之后,可以在整个应用程序中访问 .env 文件。假设您的 .env 文件如下所示。
DB_USER=mohit
访问 DB_USER 变量使用 process.env.DB_USER
TA贡献1811条经验 获得超4个赞
您需要使用MongooseModule.forRootAsync(() => {...})
而不是MongooseModule.forRoot(...)
这使得 MongooseModule 等待其 IOC 依赖项。
请参阅:https ://docs.nestjs.com/techniques/mongodb#async-configuration
添加回答
举报