CoDeR2006
@CoDeR2006
TypeScript

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

У меня есть небольшой бэк на 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)
    }
  }

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
      )
  }


Когда случается ошибка, например где-то в глубинке, я получаю просто еб*ть какой огромный ответ, например ошибка в 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"
	}
}


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


когда происходит ошибка в validate в самой первой функции, вернуть нужно:
{
	{
          .....
        }
	"status": 500,
	"message": "Не удалось аутентифицироваться",
	"name": "HttpException"
}


когда происходит ошибка в createBotHash
{
	{
          .....
        }
	"status": 500,
	"message": "Не удалось создать bot hash",
	"name": "HttpException"
}


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

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

ребят, поделитесь опытом, как правильно выстроить работу с функциями в моем telegram.validate.service.ts так что бы нормально возвращать ошибку, нужную ошибку, что бы можно было понять на клиенте, где именно ошибка, а не разворачивать огромный объект ответа. Повторюсь возможно это считается нормой, если это так, так и напишите. Спасибо !
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Оставьте один try/catch на самой внешней функции, будете получать только одно исключение.
Ответ написан
@historydev Куратор тега JavaScript
Острая аллергия на анимешников
Убери везде свой HttpException, кроме самого верха, как сказал Rsa97 и оставь один на самом верху:
try {
      return this.validateHash(user)
    } catch (error) {
     throw new HttpException(error, 500)
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы