我正在开发我的第一个NestJS应用程序,它可以很好地使用app.module.ts
中的硬编码数据库连接字符串。
但是根据我们的要求,我必须从环境文件中选择数据库配置值。为此,我遵循了nestjs文档网站https://docs.nestjs.com/techniques/configuration上的配置文档
但问题是,我需要使用同一文件中的.env变量进行数据库连接,这是失败的。
下面是我的原始代码,它工作得很好:
@Module({
imports: [
MongooseModule.forRoot(`mongodb+srv://myusername:[email protected]?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
现在,我想从.env文件中选择那些数据库值,如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],
})
7条答案
按热度按时间whlutmcx1#
来自Nestjs文档-https://docs.nestjs.com/techniques/configuration
这些步骤对我使用MySQL和TypeORM很有效。
1.安装Nestjs配置模块-
npm i --save @nestjs/config
。它依赖于dotenv1.在根文件夹中创建一个
.env
文件,并添加键/值对,例如:DATABASE_USER=myusername
1.打开app.module.ts并导入config模块
1.在
app.module.ts
的导入部分添加下面一行。我把它作为第一个输入。它将自动加载.env文件的内容。1.然后你就可以开始按照数据库配置部分中常用的process. env来使用env变量<variable_name>了。
有关ConfigModule的更多配置,请参阅上面的链接。您可以使用自定义文件/路径并将模块设置为全局可见。
6ovsh4lw2#
1.继续使用ConfigModule
您需要在npm脚本中设置
NODE_ENV
,以便它可以用于基于env加载env文件。现在你可以使用
ConfigModule
:2.使用
dotenv
在你的
package.json
中添加一些脚本来设置你所在的环境。在
main.ts
文件中导入dotenv
。确保你在文件的顶部这样做。3.使用
env-cmd
你可以使用
env-cmd
npm包。并为
package.json
中的不同env添加一些命令,例如:现在你可以使用env变量,例如:
process.env.MONGO_CONNECTION_STRING
更新:
要克服env set命令在不同平台下的问题,可以安装
cross-env
包。并更新脚本:
qlckcl4x3#
6mzjoqzu4#
使用nestjs/config包:
npm install @nestjs/config
安装软件包后,在app模块(app.module.ts文件)中:
之后,.env文件可以在整个应用程序中访问。假设你的.env文件看起来像这样。
要访问DB_USER变量,请使用process.env.DB_USER
envsm3lx5#
您需要使用
MongooseModule.forRootAsync(() => {...})
而不是MongooseModule.forRoot(...)
这使得MongooseModule等待其IOC依赖项。
参见:https://docs.nestjs.com/techniques/mongodb#async-configuration
yrefmtwq6#
要在app.module.ts本身中使用NestJS配置(dot-env),请使用
MongooseModule.forRootAsync({})
。这是我的代码。kr98yfug7#