Size: a a a

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

2020 September 30

BK

Bogdan Korenkov in NestJS — русскоязычное сообщество
есть такой дизайн паттерн когда БЛ в контроллерах лежит - очень удобно что все в одном файле лежит и не надо переключаться между окнами в редакторе
источник

AD

Alexander Doroshenko in NestJS — русскоязычное сообщество
Но контроллеры же должны быть тонкими
источник

А

Андрей in NestJS — русскоязычное сообщество
Привет всем.

Есть контроллер который обратабывает GET /users/:userId  и соответсвенно в сервисе есть метод который по id получает юзера из БД

Вопрос такой: Где лучше выбрасывать HttpException (throw new NotFoundException)? В самом сервисе или же лучше из сервиса возвразать объект юзера или null, а исключение выбрасывать в контроллеер?
источник

🏡К

🏡 Назар Калитюк... in NestJS — русскоязычное сообщество
Андрей
Привет всем.

Есть контроллер который обратабывает GET /users/:userId  и соответсвенно в сервисе есть метод который по id получает юзера из БД

Вопрос такой: Где лучше выбрасывать HttpException (throw new NotFoundException)? В самом сервисе или же лучше из сервиса возвразать объект юзера или null, а исключение выбрасывать в контроллеер?
ну конечно в контроллере. Сервис ничего не знает про то, веб у вас приложение или нет. http там или что то другое
источник

А

Андрей in NestJS — русскоязычное сообщество
🏡 Назар Калитюк
ну конечно в контроллере. Сервис ничего не знает про то, веб у вас приложение или нет. http там или что то другое
да вот просто смотрю примеры проектов, и везде практически исключения в сервисе
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
Андрей
Привет всем.

Есть контроллер который обратабывает GET /users/:userId  и соответсвенно в сервисе есть метод который по id получает юзера из БД

Вопрос такой: Где лучше выбрасывать HttpException (throw new NotFoundException)? В самом сервисе или же лучше из сервиса возвразать объект юзера или null, а исключение выбрасывать в контроллеер?
ну, есть такой принцип, fail fast. Типа что-то пошло не так -> исключение в этом же месте сразу
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
но есть люди которые с ним согласны, и которые с ним не согласны
источник

Т

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

Т

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

BY

Bitalik Yatsenko in NestJS — русскоязычное сообщество
Можно кастомные exception кидать в сервисах а в Exception filters отлавливать и превращать в http ошибки ( кто то писал здесь о таком способе если не ошибаюсь )
источник

А

Андрей in NestJS — русскоязычное сообщество
Bitalik Yatsenko
Можно кастомные exception кидать в сервисах а в Exception filters отлавливать и превращать в http ошибки ( кто то писал здесь о таком способе если не ошибаюсь )
а какой смысл?
источник

А

Андрей in NestJS — русскоязычное сообщество
Тёмыч
ну, есть такой принцип, fail fast. Типа что-то пошло не так -> исключение в этом же месте сразу
короче, это вкусовщина?
источник

BY

Bitalik Yatsenko in NestJS — русскоязычное сообщество
Ну сервисы не будуть знать http или что другое
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
Андрей
короче, это вкусовщина?
ну не совсем, если тебе нет смысла выносить экзепшен - кидай его сразу
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
вот в случае ненайденного юзера вся работа прекращается по сути
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
нет смысла гонять null и где-то его ловить
источник

А

Андрей in NestJS — русскоязычное сообщество
Тёмыч
вот в случае ненайденного юзера вся работа прекращается по сути
но вот я и думаю, что могут возникнуть ситуации, когда я сервис буду не из контроллера дергать, а из дургого сервиса (например не по id, а по номеру искать юзера) и в зависимости от того, есть или нет юзер, делать какие-то операции.
А с другой строны, может быть ситуация когда тебе в рамках одного контроллера, нужно будет вернуть разные http статусы, в зависимости от того, что произошло
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
Андрей
но вот я и думаю, что могут возникнуть ситуации, когда я сервис буду не из контроллера дергать, а из дургого сервиса (например не по id, а по номеру искать юзера) и в зависимости от того, есть или нет юзер, делать какие-то операции.
А с другой строны, может быть ситуация когда тебе в рамках одного контроллера, нужно будет вернуть разные http статусы, в зависимости от того, что произошло
ну я тут не знаю, как правильно (у меня мало опыта в принципе). У меня вот findUser, который дергается из контроллера, если его не находит, то его создает и возвращает. А для других сервисов есть отдельный findUser. Тут я наверное нарушаю DRY, но findUser "внешний" еще проверяет, есть ли у того юзера, который ищет юзера, право искать этого юзера, и если нет, то из сервиса может упасть 403
источник

Т

Тёмыч in NestJS — русскоязычное сообщество
а как тут более правильно может более опытные коллеги подскажут
источник

А

Андрей in NestJS — русскоязычное сообщество
Думаю, стоит бросать исключения в сервисе, а если мне нужно переиспользовать метод сервиса в другом сервисе, то его можно завернуть в try/catch и по статусу ошбики определить, какая проблема возникла и в зависимости от этого действать. Либо прокидывать этот эксепешн дальше, либо продолжать работу.

Если имеющиеся http статусы будут не достаточно иформативны, можно попробовать сделать что-то по этому примеру https://stackoverflow.com/questions/57568559/how-do-i-organise-throwing-business-logic-exceptions-in-nestjs-services
источник