Обработка ошибок в GraphQL-Express: лучшие практики и примеры кода

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

  1. Выдача ошибок в преобразователях:
    Общим методом обработки ошибок в GraphQL-Express является выдача ошибок непосредственно в функциях преобразователя. Этот подход позволяет вам предоставлять конкретные сообщения об ошибках и настраивать ответ на основе обнаруженной ошибки. Вот пример:
const resolvers = {
  Query: {
    getUser: (parent, args) => {
      const user = getUserById(args.id);
      if (!user) {
        throw new Error("User not found!");
      }
      return user;
    },
  },
};
  1. Пользовательские классы ошибок.
    Вы можете создавать собственные классы ошибок, чтобы обеспечить дополнительный контекст и различать различные типы ошибок. Этот подход помогает организовать и централизовать логику обработки ошибок. Вот пример:
class AuthenticationError extends Error {
  constructor() {
    super("Authentication failed!");
    this.name = "AuthenticationError";
  }
}
// Usage
const resolvers = {
  Query: {
    getUsers: (parent, args, context) => {
      if (!context.isAuthenticated) {
        throw new AuthenticationError();
      }
// Fetch and return users
    },
  },
};
  1. Использование промежуточного программного обеспечения.
    Функции промежуточного программного обеспечения Express предоставляют мощный способ глобальной обработки ошибок в GraphQL-Express. Вы можете определить собственное промежуточное программное обеспечение для обработки ошибок, которое перехватывает ошибки и возвращает соответствующие ответы. Вот пример:
app.use((err, req, res, next) => {
  // Handle GraphQL errors
  if (err instanceof GraphQLError) {
    return res.status(400).json({ message: err.message });
  }
// Handle other errors
  return res.status(500).json({ message: "Internal server error" });
});
  1. Форматирование ошибок.
    Вы можете форматировать ответы об ошибках единообразным образом, чтобы предоставить клиентам содержательную информацию. Этого можно добиться, создав собственную функцию форматирования ошибок и используя ее в промежуточном программном обеспечении для обработки ошибок. Вот пример:
function formatError(error) {
  return {
    message: error.message,
    code: error.originalError && error.originalError.code,
    locations: error.locations,
    path: error.path,
  };
}
// Configure Apollo Server
const server = new ApolloServer({
  typeDefs,
  resolvers,
  formatError,
});

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

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