Обработка ошибок — важнейший аспект разработки любого приложения, и GraphQL-Express предоставляет надежные механизмы для корректной обработки ошибок. В этой статье мы рассмотрим различные методы и лучшие практики обработки ошибок в GraphQL-Express, а также приведем примеры кода, иллюстрирующие каждый подход.
- Выдача ошибок в преобразователях:
Общим методом обработки ошибок в GraphQL-Express является выдача ошибок непосредственно в функциях преобразователя. Этот подход позволяет вам предоставлять конкретные сообщения об ошибках и настраивать ответ на основе обнаруженной ошибки. Вот пример:
const resolvers = {
Query: {
getUser: (parent, args) => {
const user = getUserById(args.id);
if (!user) {
throw new Error("User not found!");
}
return user;
},
},
};
- Пользовательские классы ошибок.
Вы можете создавать собственные классы ошибок, чтобы обеспечить дополнительный контекст и различать различные типы ошибок. Этот подход помогает организовать и централизовать логику обработки ошибок. Вот пример:
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
},
},
};
- Использование промежуточного программного обеспечения.
Функции промежуточного программного обеспечения 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" });
});
- Форматирование ошибок.
Вы можете форматировать ответы об ошибках единообразным образом, чтобы предоставить клиентам содержательную информацию. Этого можно добиться, создав собственную функцию форматирования ошибок и используя ее в промежуточном программном обеспечении для обработки ошибок. Вот пример:
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, гарантируя корректную обработку ошибок и эффективную передачу клиентам.