Как правильно настроить конфиг в NestJS?
Я использую nest-modules/mailer
отправить электронное письмо, и у меня возникли проблемы во время настройки конфигурации для MailerModule
.
(1) Раньше я использовал необработанный dotenv
пакет в мою конфигурацию в main.ts
подобно:
dotenv.config({
path: 'src/config/config.env',
});
Но я не могу назначить конфиг на MailerModule
в app.module.ts
.
(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
.
Как мне это исправить?
2 ответа
Я придумал, как это правильно решить на текущем этапе:
загрузить 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,
},
},
}
}
})
]
Взглянув на образец кода, предоставленный сnest-modules/mailer
достаточно загрузить свой .env
как это в AppModule
, прямо из dotenv с require
импорт:
require('dotenv').config({
path: 'src/config/config.env',
});
И вы, вероятно, также можете использовать машинный импорт dotenv и вызвать config()
в строке над твоим AppModule
определение или, лучше, в вашем main.ts bootstrap()
перед созданием экземпляра приложения NestJS.