1

nest-modules/mailer用来发送电子邮件,在MailerModule.

(1) 以前我在dotenv我的配置中使用原始包,main.ts例如:

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

但我无法将配置分配给MailerModulein app.module.ts

(2) 然后我尝试使用设置配置@nesjs/configapp.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 {
 //...
}

所以我无法使用configServiceprocess.env.*加载MailerModule.

我应该如何解决这个问题?

4

2 回答 2

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,
            },
          },
        }
      }
    })
  ]
于 2020-07-11T09:21:15.023 回答
0

查看随附的示例代码nest-modules/mailer就足以直接从 dotenv 中通过导入加载您的.env类似代码:AppModulerequire

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

而且您可能还可以使用 dotenv 的 typescript 导入并config()在定义上方的一行中调用,AppModule或者更好的是,在bootstrap()实例化 NestJS 应用程序之前在 main.ts 函数中调用。

于 2020-07-14T09:46:22.330 回答