如何在 NestJS 中正确设置配置?
Posted
技术标签:
【中文标题】如何在 NestJS 中正确设置配置?【英文标题】:How to set up config in NestJS properly? 【发布时间】:2020-10-31 22:23:31 【问题描述】:我正在使用nest-modules/mailer
发送电子邮件,但在MailerModule
的配置设置过程中遇到了一些问题。
(1) 以前我在main.ts
中的配置中使用了原始的dotenv
包,例如:
dotenv.config(
path: 'src/config/config.env',
);
但我无法在app.module.ts
中将配置分配给MailerModule
。
(2) 然后我尝试使用@nesjs/config
设置配置,app.module.ts
看起来像这样:
import config from 'src/config/config';
@Module(
controllers: [
//...
],
providers: [
//...
],
imports: [
HttpModule,
ConfigModule.forRoot(
load: [config]
),
MailerModule.forRoot(
transport:
ignoreTLS: true,
secure: false, // true for 465, false for other ports
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
auth:
user: process.env.EMAILDEV_INCOMING_USER,
pass: process.env.EMAILDEV_INCOMING_PWD
,
,
defaults:
from: `'nest-modules' $process.env.EMAILDEV_INCOMING_`, // outgoing email ID
,
template:
,
)
]
)
export class AppModule implements NestModule
//...
所以我无法使用configService
和process.env.*
来加载MailerModule
的配置。
我应该如何解决这个问题?
【问题讨论】:
【参考方案1】:我在现阶段想出了如何正确解决这个问题:
异步加载EmailModule
(以及您需要使用配置的其他内容)。
imports: [
HttpModule,
MailerModule.forRootAsync(
useFactory: async () =>
return
transport:
ignoreTLS: true,
secure: false, // true for 465, false for other ports
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
auth:
user: process.env.EMAILDEV_INCOMING_USER, // generated ethereal user
pass: process.env.EMAILDEV_INCOMING_PWD // generated ethereal password
,
,
defaults:
from: `'nest-modules' $process.env.EMAILDEV_INCOMING_`, // outgoing email ID
,
template:
dir: process.cwd() + '/src/shared/static/views',
adapter: new HandlebarsAdapter(),
options:
strict: true,
,
,
)
]
【讨论】:
【参考方案2】:查看nest-modules/mailer
提供的sample 代码就足以在AppModule
中加载您的.env
,直接从dotenv 使用require
导入:
require('dotenv').config(
path: 'src/config/config.env',
);
您还可以使用 dotenv 的 typescript 导入并在您的 AppModule
定义上方的一行中调用 config()
,或者更好的是,在您实例化 NestJS 应用程序之前在您的 main.ts bootstrap()
函数中调用。
【讨论】:
以上是关于如何在 NestJS 中正确设置配置?的主要内容,如果未能解决你的问题,请参考以下文章
Passport 策略如何知道在 nestJS 中选择正确的 jwt 策略?
如何在 NestJs 框架中使用 postgres 和 sequelize 正确定义 DTO 对象