当前位置: 首页 > 工具软件 > Mailer.js > 使用案例 >

nestjs整合@nestjs-modules-mailer和@nestjs-config以及@nestjs-config和nestjs-config的坑

艾俊悟
2023-12-01

nestjs整合@nestjs-modules-mailer和@nestjs-config以及@nestjs-config和nestjs-config的坑

从年份上来看,早期没有config配置插件时,应该都用的时nestjs/config提供的

@nestjs-modules/mailer整合@nestjs/config

  • 新建文件:src/config/email.config.ts,当然名字随便取(又不是java)
import { PugAdapter } from '@nestjs-modules/mailer/dist/adapters/pug.adapter';
import { registerAs } from '@nestjs/config';
import { join } from 'path';

export default registerAs('email', () => ({
  transport: {
    host: 'smtp.sina.cn',
    port: 25,
    ignoreTLS: true,
    secure: false,
    auth: {
      user: 'xxx', 
      pass: 'xxx', // xxx是什么你懂的
    }
  },
  defaults: {
    from: '"nest-modules" <modules@nestjs.com>',
  },
  template: {
    // 这里注意一下路径, 不然加载的路径是错误的
    dir: join(__dirname, '../templates/email'),
    adapter: new PugAdapter(),
    options: {
      strict: true,
    }
  }
}));
  • app.module.ts中进行配置
import { MailerModule } from '@nestjs-modules/mailer';
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { EmailModule } from './email/email.module';
import EmailConfig from './config/email.config';

@Module({
  imports: [
    EmailModule,
    ConfigModule.forRoot({
      // 不加载env环境变量
      ignoreEnvFile: true,
      
      // 加载我们的邮件配置
      load: [EmailConfig],
    }),
    MailerModule.forRootAsync({
        
      // 特别注意一定要导入, 不导入就报错, 说你没在imports引入
      imports: [ConfigModule],
      useFactory: (config: ConfigService) => {
		// 拿到我们配置的config别名 #registerAs方法
        return config.get('email');
      },
      inject: [ConfigService]
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}
  • 注意:因为在nest/config中是这样配置的
// 获取配置
ConfigModule.load(resolve(__dirname, 'config', '**/!(*.d).{ts,js}')),

// 邮件配置
MailerModule.forRootAsync({
useFactory: (config: ConfigService) => config.get('email'),
inject: [ConfigService],
}),

它不需要imports就可以run了,导致我使用@nest/config时,卡了半天(看了@nest/config官方文档nest/config文档都没解决),最后解决办法是查看了@nestjs-modules-mailer的GitHub官方Doc才解决的

@nestjs-modules-mailer插件官方doc解决路径:

https://github.com/CrowdLinker/nestjs-mailer#asynchronous

更多@nest/config用法推荐查看官网教程,比如yaml配置环境变量…这种方便开发的配置还是有必要学习的

 类似资料: