5 回答

TA貢獻1776條經(jīng)驗 獲得超12個贊
從這里的 Nestjs 文檔 - https://docs.nestjs.com/techniques/configuration
這些步驟對我適用于 MySQL 和 TypeORM。
安裝 Nestjs 配置模塊 -
npm i --save @nestjs/config
. 它依賴于dotenv.env
在您的根文件夾中創(chuàng)建一個文件并添加您的鍵/值對,例如DATABASE_USER=myusername
打開 app.module.ts 并導(dǎo)入配置模塊
import { ConfigModule } from '@nestjs/config';
將以下行添加到 的導(dǎo)入部分
app.module.ts
。我將它添加為第一次導(dǎo)入。它會自動加載 .env 文件的內(nèi)容。
ConfigModule.forRoot(),
然后,您可以按照數(shù)據(jù)庫配置部分中的常規(guī) process.env.<variable_name> 開始使用環(huán)境變量,例如
process.env.DATABASE_USER
有關(guān) ConfigModule 的更多配置,請參見上面的鏈接。您可以使用自定義文件/路徑并將模塊設(shè)置為全局可見。

TA貢獻1829條經(jīng)驗 獲得超4個贊
1.繼續(xù)使用ConfigModule
您需要NODE_ENV在 npm scripts 中設(shè)置,以便它可以用于根據(jù) env 加載 env 文件。
"scripts": {
"start:local": "NODE_ENV=local npm run start"
"start:dev": "NODE_ENV=dev npm run start"
}
現(xiàn)在你可以使用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設(shè)置您所在的環(huán)境。
"scripts": {
...
"start:local": "NODE_ENV=local npm run start"
"start:dev": "NODE_ENV=dev npm run start"
}
dotenv在main.ts文件中導(dǎo)入。確保在文件頂部執(zhí)行此操作。
require('dotenv').config({ path: `../${process.env.NODE_ENV}.env` });
3.使用env-cmd
你可以使用env-cmdnpm 包。
npm install env-cmd
并在 中添加一些針對不同環(huán)境的命令package.json,例如:
"scripts": {
...
"start:local": "env-cmd -f local.env npm run start"
"start:dev": "env-cmd -f dev.env npm run start"
}
...
現(xiàn)在您可以使用環(huán)境變量,例如:
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條經(jīng)驗 獲得超5個贊
MongooseModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
uri: configService.get<string>('MONGODB_URI'),
}),
inject: [ConfigService],
});

TA貢獻1820條經(jīng)驗 獲得超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 {}
之后,可以在整個應(yīng)用程序中訪問 .env 文件。假設(shè)您的 .env 文件如下所示。
DB_USER=mohit
訪問 DB_USER 變量使用 process.env.DB_USER

TA貢獻1811條經(jīng)驗 獲得超4個贊
您需要使用MongooseModule.forRootAsync(() => {...})
而不是MongooseModule.forRoot(...)
這使得 MongooseModule 等待其 IOC 依賴項。
請參閱:https ://docs.nestjs.com/techniques/mongodb#async-configuration
添加回答
舉報