Как формировать ответ с Ошибками — Nest JS?

Ссылка скопирована
1 ответ

У меня есть небольшой бэк на Nest JS, на котором есть некий telegram.validate.service.ts (что бы не сбивать с толку фейк код)

telegram.validate.service.ts

validate(user: ResponseVkUserDto): TValidateUserResponse | HttpException {     try {       return this.validateHash(user)     } catch (error) {       throw new HttpException({ message: 'Не удалось аутентифицироваться', error }, 500)     }   }

validate(user: ResponseVkUserDto): TValidateUserResponse | HttpException { try { return this.validateHash(user) } catch (error) { throw new HttpException({ message: 'Не удалось аутентифицироваться', error }, 500) } }

createBotHash(userString: string): string {     try {       ......     } catch (error) {       throw new HttpException({ message: 'Не удалось создать bot hash', error }, 500)     }   }

createBotHash(userString: string): string { try { ...... } catch (error) { throw new HttpException({ message: 'Не удалось создать bot hash', error }, 500) } }

validateHash(user: ResponseVkUserDto): TValidateUserResponse | HttpException {     try {        ......       if (botHash !== userHash) return new HttpException('Ошибка при сравнивании хешей', 400)       return user     } catch (error) {       throw new HttpException(         {           message:             'Ошибка при валидации, если вы все сделали правильно, обратитесь в Тех.Поддержку',           error,         },         500       )   }

validateHash(user: ResponseVkUserDto): TValidateUserResponse | HttpException { try { ...... if (botHash !== userHash) return new HttpException('Ошибка при сравнивании хешей', 400) return user } catch (error) { throw new HttpException( { message: 'Ошибка при валидации, если вы все сделали правильно, обратитесь в Тех.Поддержку', error, }, 500 ) }

Когда случается ошибка, например где-то в глубинке, я получаю просто еб*ть какой огромный ответ, например ошибка в createBotHash:

{ 	"message": "Не удалось аутентифицироваться", 	"error": { 		"response": { 			"message": "Ошибка при валидации, если вы все сделали правильно, обратитесь в Тех.Поддержку", 			"error": { 				"response": { 					"message": "Не удалось создать bot hash", 					"error": { 						"code": "ERR_INVALID_ARG_TYPE" 					} 				}, 				"status": 500, 				"message": "Не удалось создать bot hash", 				"name": "HttpException" 			} 		}, 		"status": 500, 		"message": "Ошибка при валидации, если вы все сделали правильно, обратитесь в Тех.Поддержку", 		"name": "HttpException" 	} }

{ "message": "Не удалось аутентифицироваться", "error": { "response": { "message": "Ошибка при валидации, если вы все сделали правильно, обратитесь в Тех.Поддержку", "error": { "response": { "message": "Не удалось создать bot hash", "error": { "code": "ERR_INVALID_ARG_TYPE" } }, "status": 500, "message": "Не удалось создать bot hash", "name": "HttpException" } }, "status": 500, "message": "Ошибка при валидации, если вы все сделали правильно, обратитесь в Тех.Поддержку", "name": "HttpException" } }

хотелось бы увидеть ответ:

{ 	"response": "текст ошибки (пофиг на вложеность)", 	"status": 400, 	"message": "текст ошибки (пофиг на вложеность)", 	"name": "HttpException" }

{ "response": "текст ошибки (пофиг на вложеность)", "status": 400, "message": "текст ошибки (пофиг на вложеность)", "name": "HttpException" }

когда происходит ошибка в validate в самой первой функции, вернуть нужно:

{ 	{           .....         } 	"status": 500, 	"message": "Не удалось аутентифицироваться", 	"name": "HttpException" }

{ { ..... } "status": 500, "message": "Не удалось аутентифицироваться", "name": "HttpException" }

когда происходит ошибка в createBotHash

{ 	{           .....         } 	"status": 500, 	"message": "Не удалось создать bot hash", 	"name": "HttpException" }

{ { ..... } "status": 500, "message": "Не удалось создать bot hash", "name": "HttpException" }

и так далее, главная проблема в том что когда случается ошибка где-то в глубинке, я получаю огромный ответ, с пачкой ошибок, конечно же если это считается нормой то окей, но что-то мне подсказывает что так не должно быть, скорее всего ошибка в моей структуре кода, а именно в каком то не правильном возврате ошибок.

так же побывал не обворачивать каждую функцию в try/catch, но это еще та хрень, получается что когда ошибка ложится сервер, а так мне точно не надо.

ребят, поделитесь опытом, как правильно выстроить работу с функциями в моем telegram.validate.service.ts так что бы нормально возвращать ошибку, нужную ошибку, что бы можно было понять на клиенте, где именно ошибка, а не разворачивать огромный объект ответа. Повторюсь возможно это считается нормой, если это так, так и напишите. Спасибо !

Дополнительно:

Ответы:

Оставьте один try/catch на самой внешней функции, будете получать только одно исключение.

  • так а если сервер ложится если происходит ошибка на какой-то внутренней функции, как от туда убрать try/cath, или убрать только возврат ошибки ?
  • Max Sagaidak, catch ловит исключение по всей вложенности функций, вызываемых в блоке try.
    function foo() {   throw new Error('Error in foo'); }  function buz() {   foo(); }  function biz() {   buz(); }  try {   biz(); } catch (e) {   console.log(e.message); }  // Error in foo

    function foo() { throw new Error('Error in foo'); } function buz() { foo(); } function biz() { buz(); } try { biz(); } catch (e) { console.log(e.message); } // Error in foo

  • Rsa97, сделал как ты и говорил, убрал лишние HttpException:
    validate(user: ResponseVkUserDto): TValidateUserResponse | HttpException {     try {       return this.validateHash(user)     } catch (error) {       throw new HttpException('Не удалось провалидировать ваши данные', 400, { description: error })     }   }    createBotHash(userString: string): string {        }    createUserString(user: TValidateUserResponse): string {        }    validateHash(user: ResponseVkUserDto): TValidateUserResponse | HttpException    {    } }

    validate(user: ResponseVkUserDto): TValidateUserResponse | HttpException { try { return this.validateHash(user) } catch (error) { throw new HttpException('Не удалось провалидировать ваши данные', 400, { description: error }) } } createBotHash(userString: string): string { } createUserString(user: TValidateUserResponse): string { } validateHash(user: ResponseVkUserDto): TValidateUserResponse | HttpException { } }

    ток вот теперь вопрос
    а если мне понадобиться дернуть например validateHash не через функцию validate а на прямую, а у нее судя по коду нет обертки try/catch, тогда получается сервер ляжет. Как быть с этим, какие решения ?

  • Max Sagaidak, Ставить один единственный try...catch в единой точке входа.
  • Rsa97, ема я тулобень, я ток ща понял как это просто фиксится, рил тупо где вызываешь ставишь try/catch, мдааа.... Спасибо большое)

Убери везде свой HttpException, кроме самого верха, как сказал Rsa97 и оставь один на самом верху:

try {       return this.validateHash(user)     } catch (error) {      throw new HttpException(error, 500)     }

try { return this.validateHash(user) } catch (error) { throw new HttpException(error, 500) }

  • так а если сервер ложится если происходит ошибка на какой-то внутренней функции, как от туда убрать try/cath, или убрать только возврат ошибки ?
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

Для того чтобы эффективно решить проблему с ошибками в Nest JS, важно следовать определенным шагам. Вот несколько рекомендаций, которые могут помочь вам в этом процессе:

1. Логирование ошибок: Один из основных способов выявления и исправления ошибок - это использование логирования. Вы можете настроить логирование в вашем приложении Nest JS, чтобы отслеживать возникающие ошибки. Для этого вы можете использовать стандартный модуль logging в Nest JS или любую популярную библиотеку логирования, такую как Winston или Bunyan.

2. Обработка ошибок: В Nest JS есть встроенная функциональность для обработки ошибок. Вы можете использовать middleware для обработки ошибок, которые возникают в вашем приложении. Например, вы можете создать middleware для перехвата и обработки исключений или ошибок в вашем приложении.

3. Тестирование приложения: Тестирование вашего приложения Nest JS поможет выявить потенциальные ошибки до их появления в продакшене. Вы можете написать unit-тесты, интеграционные тесты или e2e-тесты, чтобы обеспечить работоспособность и надежность вашего приложения.

4. Использование сторонних инструментов: В случае, если у вас возникают сложности с обработкой ошибок в Nest JS, вы также можете обратиться к сторонним инструментам, таким как Sentry, Rollbar или Bugsnag, которые помогут вам отслеживать и исправлять ошибки в вашем приложении.

Надеюсь, эти рекомендации помогут вам эффективно управлять ошибками в вашем приложении на Nest JS. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно