При работе с GraphQL и Class-Validator важно эффективно обрабатывать ошибки, чтобы предоставлять клиентам содержательную обратную связь. В этой статье мы рассмотрим различные методы форматирования ошибок Class-Validator для GraphQL, используя разговорный язык и примеры кода.
- Использование пользовательских сообщений об ошибках:
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;
}
- Сопоставление ошибок проверки с ошибками 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),
}));
}
- Обработка нескольких ошибок проверки:
В 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;
}
- Извлечение кодов ошибок.
В дополнение к сообщениям об ошибках вы можете включать коды ошибок в ответы об ошибках 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.