Форматирование ошибок валидатора классов для GraphQL: подробное руководство

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

  1. Использование пользовательских сообщений об ошибках:
    Class-Validator позволяет вам определять собственные сообщения об ошибках для каждого правила проверки. Предоставляя удобные для пользователя сообщения, вы можете гарантировать, что ответы GraphQL содержат четкую и понятную информацию об ошибках. Давайте рассмотрим пример:
import { Length, IsEmail } from 'class-validator';
class User {
  @Length(5, 20, { message: 'Username must be between 5 and 20 characters long' })
  username: string;
  @IsEmail({}, { message: 'Invalid email address' })
  email: string;
}
  1. Сопоставление ошибок проверки с ошибками GraphQL:
    Чтобы отформатировать ошибки Class-Validator в соответствии со структурой ошибок GraphQL, вы можете создать вспомогательную функцию, которая сопоставляет ошибки проверки с соответствующим форматом ошибок GraphQL. Вот пример реализации:
import { ValidationError } from 'class-validator';
function mapErrorsToGraphQL(errors: ValidationError[]): any[] {
  return errors.map((error) => ({
    field: error.property,
    message: Object.values(error.constraints),
  }));
}
  1. Обработка нескольких ошибок проверки:
    В GraphQL часто встречаются сценарии, когда для одного запроса возникает несколько ошибок проверки. Чтобы справиться с такими случаями, вы можете изменить функцию сопоставления ошибок, чтобы она возвращала массив ошибок GraphQL:
function mapErrorsToGraphQL(errors: ValidationError[]): any[] {
  const gqlErrors = [];
  for (const error of errors) {
    for (const [_, constraints] of Object.entries(error.constraints)) {
      gqlErrors.push({ field: error.property, message: constraints });
    }
  }
  return gqlErrors;
}
  1. Извлечение кодов ошибок.
    В дополнение к сообщениям об ошибках вы можете включать коды ошибок в ответы об ошибках GraphQL. Этого можно добиться, расширив класс ValidationErrorи добавив пользовательское свойство code:
class CustomValidationError extends ValidationError {
  code: string;
}
// Usage:
const error = new CustomValidationError();
error.code = 'INVALID_USERNAME';

Используя собственные сообщения об ошибках, сопоставляя ошибки проверки с ошибками GraphQL, обрабатывая несколько ошибок и извлекая коды ошибок, вы можете форматировать ошибки из Class-Validator так, чтобы они эффективно соответствовали структуре ошибок GraphQL. Это гарантирует, что ваш GraphQL API предоставит клиентам четкую и краткую информацию об ошибках.

Не забывайте всегда корректно обрабатывать ошибки и предоставлять осмысленные сообщения об ошибках, чтобы улучшить взаимодействие с разработчиком и общее качество вашего GraphQL API.