@judywb

Как не удалять директорию во время компиляции?

У меня есть директория mailer, в ней есть папка templates, а вней есть файл confirm-mail.ejs

В mailer.service.ts я использую файл confirm-mail.ejs, но во время компиляции, эта папка с файлом удаляются, и вылезает ошибка, код в сервисе:
import {Injectable, Logger} from '@nestjs/common';
import {UserService} from "../user/user.service";
import {JwtService} from "@nestjs/jwt";
import {MailerService} from "@nestjs-modules/mailer";
import * as path from "path";

@Injectable()
export class MailService {
    constructor(private readonly mailerService: MailerService) {}

    async sendConfirmMail(user) {
        this.mailerService
            .sendMail({
                to: user.email, // list of receivers
                subject: 'Авторизация на сайте ' + process.env.API_URL, // Subject line
                text: 'welcome', // plaintext body
                template: path.join(__dirname, '/../mailer/templates', 'confirm-mail.ejs'),
                context: {
                    urlConfirmAddress: user.activationLink
                }
            })
            .then(() => {})
            .catch((error) => {
                Logger.error(error)
            });
    }
}

Ошибка:
ERROR Error: ENOENT: no such file or directory, open 'confirm-mail.ejs'
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
Torin_Asakura
@Torin_Asakura
Lead Architect
judywb и снова привет.
Возможно стоит попробовать указать путь до директории с темплейтами в модуле (так же обязательно нужно юзать EjsAdapter):

@Module({
  imports: [MailerModule.forRoot({
    transport: environment.SmtpDetails,
    defaults: {
      from: environment.SmtpEmail,
    },
    template: {
      dir: path,
      adapter: new EjsAdapter(),
      options: {
        strict: true,
      },
    },
  })
})


В таком случае указывать шаблон в методе sendMail можно так:

const emailData = await this.mailerService.sendMail({
   to: emailTo,
   from: 'user@test.com',
   subject: 'Testing Nest Mailermodule with template',
   template: 'notification', 
       context: {  // Data to be sent to template engine.
   "code": 'cf1a3f828287',
   "username": 'john doe',
 },
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы