Адрес и тема в Nest
Отправка с фиксированным текстом уже работает, но каждому клиенту нужны свои поля: кому адресовать уведомление и как назвать тему. Пока сервис не читает данные из запроса, страница не может передать их в письмо.
Контроллер достаёт строки из тела
запроса и передаёт их параметрами
в метод сервиса. Сервис подставляет
их в объект для sendMail
в поля to и
subject, а текст письма
оставляет коротким и одинаковым
для любого вызова.
Покажем на примере постов:
import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';
@Injectable()
export class PostService {
mailerService: MailerService;
constructor(mailerService: MailerService) {
this.mailerService = mailerService;
}
async sendNotice(to: string, subject: string) {
return this.mailerService.sendMail({
to,
subject,
text: 'Материал опубликован.',
});
}
}
Контроллер прочитает поля из тела и вызовет сервис:
import { Body, Controller, Post } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller('posts')
export class PostController {
postService: PostService;
constructor(postService: PostService) {
this.postService = postService;
}
@Post('mail')
sendMail(
@Body('to') to: string,
@Body('subject') subject: string,
) {
return this.postService.sendNotice(to, subject);
}
}
Сделайте в WorkerController
страницу, которая передаёт
получателя и тему в
WorkerService
для короткого текстового
уведомления.