nestjs整合@nestjs-modules-mailer和@nestjs-config以及@nestjs-config和nestjs-config的坑
- 注意:
@nestjs/config
和nestjs/config
看起来像一个库,实际上是两个库,用法也不同 @nestjs/config是官方的
:(GitHub地址)https://github.com/nestjs/confignestjs/config更像是第三方插件
:(GitHub地址)https://github.com/nestjsx/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],
}),
@nestjs-modules-mailer插件官方doc解决路径:
https://github.com/CrowdLinker/nestjs-mailer#asynchronous