📖 Scenario: You are building a simple GraphQL API for a bookstore. You want to use the context argument in your resolvers to access user information for authorization.
🎯 Goal: Create a GraphQL resolver that uses the context argument to check if a user is logged in before returning the list of books.
📋 What You'll Learn
Create a books array with three books, each having id and title.
Create a context object with a user property set to { name: 'Alice' }.
Write a resolver function called getBooks that takes parent, args, and context as arguments.
Inside getBooks, check if context.user exists; if yes, return the books array.
If context.user does not exist, return an empty array.
💡 Why This Matters
🌍 Real World
Using the context argument in GraphQL resolvers is essential for managing user authentication and authorization in real-world APIs.
💼 Career
Understanding how to access and use context in GraphQL is a key skill for backend developers working with modern API technologies.
Progress0 / 4 steps
1
Create the books data array
Create an array called books with these exact objects: { id: 1, title: '1984' }, { id: 2, title: 'Brave New World' }, and { id: 3, title: 'Fahrenheit 451' }.
GraphQL
Hint
Use const books = [ ... ] to create the array with the exact book objects.
2
Create the context object with user info
Create a constant called context and set it to an object with a user property equal to { name: 'Alice' }.
GraphQL
Hint
Use const context = { user: { name: 'Alice' } } to create the context object.
3
Write the getBooks resolver using context
Write a function called getBooks that takes parent, args, and context as parameters. Inside, check if context.user exists. If yes, return the books array.
GraphQL
Hint
Define function getBooks(parent, args, context) and use if (context.user) to check user presence.
4
Complete getBooks to return empty array if no user
Add an else clause to getBooks that returns an empty array [] if context.user does not exist.
GraphQL
Hint
Use else { return [] } to handle the case when no user is present.
Practice
(1/5)
1. What is the main purpose of the context argument in GraphQL resolvers?
easy
A. To format the response data before sending it to the client
B. To define the GraphQL schema types
C. To specify the query operation type (query, mutation, subscription)
D. To share common data like authentication or database access across all resolvers during a request
Solution
Step 1: Understand the role of context in GraphQL
The context argument is designed to hold data shared by all resolvers during a single request, such as authentication info or database connections.
Step 2: Compare with other options
Defining schema types, specifying operation types, or formatting responses are handled elsewhere, not by context.
Final Answer:
To share common data like authentication or database access across all resolvers during a request -> Option D
Quick Check:
Context = Shared data for resolvers [OK]
Hint: Context holds shared info for all resolvers in a request [OK]
Common Mistakes:
Confusing context with schema definition
Thinking context formats responses
Assuming context defines operation types
2. Which of the following is the correct way to access the context argument in a GraphQL resolver function?
easy
A. resolver(parent, args, context) { ... }
B. resolver(context, args, parent) { ... }
C. resolver(args, parent, context) { ... }
D. resolver(args, context) { ... }
Solution
Step 1: Recall resolver function signature
GraphQL resolvers receive arguments in the order: parent, args, context.
Step 2: Match the correct order
Only resolver(parent, args, context) { ... } matches this order correctly.
Final Answer:
resolver(parent, args, context) { ... } -> Option A
If running this code causes TypeError: context.getUser is not a function, what is the most likely cause?
medium
A. The context object does not have a getUser method
B. The args.id is undefined
C. The parent argument is missing
D. The resolver function is missing the args parameter
Solution
Step 1: Analyze the error message
The error says getUser is not a function on context, meaning context.getUser is undefined or not callable.
Step 2: Check other options
Undefined args.id or missing parent won't cause this specific error. Missing args parameter would cause a different error.
Final Answer:
The context object does not have a getUser method -> Option A
Quick Check:
TypeError means missing method on context [OK]
Hint: TypeError means method missing on context object [OK]
Common Mistakes:
Blaming args.id for method not found error
Assuming parent argument causes this error
Ignoring that context must have the method
5. You want to add user authentication info to all resolvers using the context argument. Which approach correctly sets up the context for this purpose?
hard
A. Pass user info as an argument in every query instead of context
B. Define user info inside each resolver separately without using context
C. Create context once per request including user info, then pass it to all resolvers
D. Use global variables to store user info accessible by resolvers
Solution
Step 1: Understand context usage for shared data
Context is designed to be created once per request and shared with all resolvers, perfect for authentication info.
Step 2: Evaluate other options
Defining user info inside each resolver duplicates code; passing user info as query args is insecure and inconvenient; global variables are unsafe for concurrent requests.
Final Answer:
Create context once per request including user info, then pass it to all resolvers -> Option C
Quick Check:
Context = single shared object per request [OK]
Hint: Set context once per request with user info for all resolvers [OK]
Common Mistakes:
Duplicating user info in every resolver
Passing sensitive info as query arguments
Using global variables causing data leaks
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.