0
0
GraphQLquery~30 mins

Custom error extensions in GraphQL - Mini Project: Build & Apply

Choose your learning style9 modes available
Custom Error Extensions in GraphQL
📖 Scenario: You are building a GraphQL API for a bookstore. You want to provide clear error messages with extra details when something goes wrong, so clients can understand and handle errors better.
🎯 Goal: Create a GraphQL schema with a query that can return custom errors including additional information in the extensions field.
📋 What You'll Learn
Define a simple GraphQL schema with a book query that takes an id argument.
Create a custom error class that adds an extensions field with extra error details.
Throw the custom error when a book with the given id is not found.
Ensure the error response includes the extensions field with the custom data.
💡 Why This Matters
🌍 Real World
Custom error extensions help API clients understand exactly what went wrong and how to handle errors gracefully.
💼 Career
Many companies use GraphQL APIs and expect developers to provide clear, structured error information for better client-side error handling.
Progress0 / 4 steps
1
Define the GraphQL schema with a book query
Create a GraphQL schema string called typeDefs with a Book type having fields id (ID!), title (String!), and a Query type with a book field that takes an id argument of type ID! and returns a Book.
GraphQL
Hint

Use backticks to create a multi-line string for the schema.

2
Create a custom error class with extensions
Define a class called BookNotFoundError that extends Error. In its constructor, accept a message and set this.extensions to an object with a code property set to BOOK_NOT_FOUND and a timestamp property set to the current ISO date string.
GraphQL
Hint

Remember to call super(message) in the constructor.

3
Implement the resolver to throw the custom error
Create a resolvers object with a Query field. Inside Query, define a book function that takes parent, args, and context. Use a hardcoded array books with one book: { id: '1', title: '1984' }. Find the book by args.id. If not found, throw a BookNotFoundError with the message Book with id {args.id} not found. Otherwise, return the book.
GraphQL
Hint

Use Array.find to locate the book by id.

4
Export the schema and resolvers for server setup
Export the typeDefs and resolvers using module.exports as an object with keys typeDefs and resolvers.
GraphQL
Hint

Use module.exports = { typeDefs, resolvers } to export both.