Size: a a a

NestJS — русскоязычное сообщество

2020 December 09

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
Кастомные ошибки и фильтр для их отображения если отличается формат от кастомных ошибок ядра, если формат совпадает то только кастомная ошибка и енам с типами ошибок
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
Формат в ядре
{code}
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
Каждая либа несёт свои ошибки и енам
источник

kk

koeshiro kagami in NestJS — русскоязычное сообщество
Разумно. То есть Если ошибка сводится к коду 400 - возвращать не Error а HttpException?
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
хттп еррор вообще не нужно возвращать, кастомные возвращай и превращай их во что хочешь через фильтр ошибок
источник

D

Dmitriy in NestJS — русскоязычное сообщество
koeshiro kagami
Делаете ли вы разные типы ошибок для обработки результата работы сервиса в контроллере, или высылаете готовый ответ из сервиса?
Перехватываю эксепшн из сервиса в контроллере и выбрасываю HttpException с нужным статус-кодом
источник

kk

koeshiro kagami in NestJS — русскоязычное сообщество
Dmitriy
Перехватываю эксепшн из сервиса в контроллере и выбрасываю HttpException с нужным статус-кодом
Вот вот.
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
лучше фильтр для модуля делать который это конвертнет
источник

kk

koeshiro kagami in NestJS — русскоязычное сообщество
🏡 ILshat Khamitov
хттп еррор вообще не нужно возвращать, кастомные возвращай и превращай их во что хочешь через фильтр ошибок
Фильтр ошибок? Глобальный pipe?
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
чтобы в контроллере мапингом не заниматся
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
источник

kk

koeshiro kagami in NestJS — русскоязычное сообщество
Ок, посмотрю на этот способ
источник

kk

koeshiro kagami in NestJS — русскоязычное сообщество
Спасибо
источник

D

Dmitriy in NestJS — русскоязычное сообщество
Я примерно вот так делаю:
@UseGuards(JwtAuthOptionalGuard)
 @UsePipes(new JsonValidationPipe())
 @HttpCode(201)
 @Post('/nicknames')
 async nicknamesOffer(@Body() dto: NicknameOfferDto, @Req() request): Promise<HttpResponse<null, null>> {
   try {
     await this.commonService.saveNickname(dto, Status.draft, request.user?request.user.id:null);
   } catch (AlreadyExistsException) {
     throw new HttpException(ResponseFactory.error({ nickname: 'nicknameAlreadyExists' }), HttpStatus.BAD_REQUEST)
   }
   return ResponseFactory.success(null);
 }


Ну и также есть ExceptionFilter, который умеет переводить ошибки, а если исключение не HttpException, то формирует общую ошибку типа "что-то пошло не так"
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
сделал бы кастомную ошибку для сервиса
new UserError(UserErrorEnum.AlreadyExists,'nicknameAlreadyExists')
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
и фильтр для модуля юзер которй конвертнет и в контроллере ничего бы вообще не было
источник

🏡K

🏡 ILshat Khamitov in NestJS — русскоязычное сообщество
@UseGuards(JwtAuthOptionalGuard)
 @UsePipes(new JsonValidationPipe())
 @HttpCode(201)
 @Post('/nicknames')
 nicknamesOffer(@Body() dto: NicknameOfferDto, @Req() request): Observable<NicknameOffer> {
   return from(this.commonService.saveNickname(dto, Status.draft, request.user?request.user.id:null));
 }
источник

D

Dmitriy in NestJS — русскоязычное сообщество
Имеешь в виду, чтобы в контроллере не ловить? Тоже вариант. Но я считаю, что в контроллере ловить ошибки сервисов - хорошая практика. По крайней мере, в том смысле, что я сразу вижу, какие внештатные ситуации обрабатываются
источник

D

Dmitriy in NestJS — русскоязычное сообщество
Я имею в виду не совсем внештатные типа 500-й, а естественные ошибки, как, например, в моём случае, когда юзер пытается предложить кличку собаки, которая у меня уже есть
источник

D

Dmitriy in NestJS — русскоязычное сообщество
Ну и, кстати, если я в фильтре буду ловить все подобные исключения, то он ведь сильно разрастётся?
источник