Как правильно настроить конфиг в Nest JS? - PullRequest
1 голос
/ 11 июля 2020

Я использую 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 ]

1 голос
/ 11 июля 2020

Я придумал, как это правильно решить на текущем этапе:

асинхронно загружать 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,
            },
          },
        }
      }
    })
  ]
0 голосов
/ 14 июля 2020

Глядя на код sample , предоставленный с nest-modules/mailer, достаточно загрузить ваш .env, как это, в AppModule, прямо из dotenv с помощью require import:

require('dotenv').config({
  path: 'src/config/config.env',
});

И вы, вероятно, также можете использовать импорт dotenv из машинописного текста и вызвать config() в строке над вашим определением AppModule или, лучше, в вашей функции main.ts bootstrap(), прежде чем создавать экземпляр Nest JS приложение

...