В 100% туториалов на ютубе эксепшены кидаются в сервисах. Может быть это все же правильный подход? 😉
Очевидно, что каждый может делать по своему. Но считать общепризнанный подход неправильным - странно
Большая часть контента для новичков, они и базовые вещи то особо понять не могут, а если что-то продвинутое показывать, то после первых минут дропнут видео, как и любой другой сложный технический контент
уже выше объясняли что лучше кидать локальные эксепшены в сервисе, а в контрллере их хэндлить и кидать нужный эксепшен уже там
а не кидать httpexception в сервисе
Тут дело вот в чём, если у вас приложуха - чисто апи, работающий по http, то из сервисов норм кидать http ексепшены, если не предвидится вообще как-то по-другому сервисы использовать. Но по своей задумке - сервис это модуль для общения с моделью (бд), и ты можешь с ним разговаривать не только по http, а, например, из других сервисов, или из других модулей на том же сервере, в этом случае у тебя не обязательно сценарий http запроса, который при неудаче бросает httpException, мб ты как-нибудь по-другому хочешь этот сценарий обработать в другом сервисе, и тогда httpException бросать будет не идиоматично (ты же не по хттп с этим сервисом общаешься) Но в целом, если сервис служит только хттп апи и только ему - не вижу особого смысла нагромождать тру/кэтч повсюду с разными типами исключений Слишком много бойлералейта. Но правильно бросать httpexception из контролёров,а не сервисов.
Чет я слишком много написал, извините
Не верное мнение, скорее всего ты не пробовал юзать фильтры, пробни, полностью откажется от этих слов)
То есть в сервисе кидаю ошибку - throw new Error А в контроллере кидаю HttpExcep?
В фильтре ловишь Error и конвертишь в HttpError
Призма, например, кидает свою ошибку, если запрос к бд не удался, и для неё можно написать глобальный фильтр, который будет ловить все ошибки призмы и в нем ты можешь уже обрабатывать, как нужно
Честно, не было еще опыта работы с призмой. Предполагаю, что просто в сервисе вызываем её функции То есть Если призма не сможет вытянуть данные Она кинет ошибку Эта ошибка всплывёт в сервисе Как я её там должен отработать?
Но если не хочешь в этом разбираться - то да, так идиоматичнее будет, если http исключения бросать в контроллере, а из сервисов бросать именно ошибки сервисные. Но ещё проще, как выше сказали, просто бросать http ошибки из сервиса, но это не совсем правильно
https://docs.nestjs.com/exception-filters Это не от призмы зависит Можно в сервисе не ловить, глобальный фильтр всё равно поймает и вернёт клиенту 500. Но можно написать свой фильтр и ловить все ошибки
Обсуждают сегодня