Как правильно настроить конфиг в 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.

Другие вопросы по тегам