РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpMaEr 119 of 201 menu
◀ ▶

Ошибка отправки в Nest

Сеть или удалённый сервер иногда недоступны в момент отправки. Если ошибку не обработать, страница может оборваться непонятным сообщением, а клиент не узнает, что письмо не ушло.

Вызов sendMail оборачивают в try и catch. При сбое транспорта сервис не пробрасывает исключение наверх, а возвращает короткую фразу, которую контроллер отдаёт как обычный ответ. Для примера укажем недостижимый хост в transport, чтобы увидеть отказ без реальной почты.

Покажем на примере постов:

import { Module } from '@nestjs/common'; import { MailerModule } from '@nestjs-modules/mailer'; import { PostController } from './post.controller.js'; import { PostService } from './post.service.js'; @Module({ imports: [ MailerModule.forRoot({ transport: { host: '127.0.0.1', port: 1, connectionTimeout: 300, }, defaults: { from: '"Posts" <posts@app.test>', }, }), ], controllers: [PostController], providers: [PostService], }) export class AppModule {}

Сервис перехватит сбой и вернёт короткий текст:

import { Injectable } from '@nestjs/common'; import { MailerService } from '@nestjs-modules/mailer'; @Injectable() export class PostService { mailerService: MailerService; constructor(mailerService: MailerService) { this.mailerService = mailerService; } async sendSafe(to: string, subject: string) { try { await this.mailerService.sendMail({ to, subject, text: 'Материал опубликован.', }); return 'Письмо отправлено'; } catch { return 'Письмо не отправилось'; } } }

Контроллер отдаст клиенту строку из сервиса:

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.sendSafe(to, subject); } }

Оберните отправку в WorkerService в перехват сбоя и верните клиенту через WorkerController короткую фразу о неудаче.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить