Context setup helps share information like user details or database connections across all parts of a GraphQL server.
Context setup in GraphQL
const server = new ApolloServer({ typeDefs, resolvers, context: ({ req }) => { // create and return context object return { user: getUserFromReq(req), db }; } });
The context function runs for every request and returns an object shared by all resolvers.
You can add anything to context like user info, database clients, or helpers.
context: () => ({ db: myDatabaseClient })context: ({ req }) => {
const user = authenticate(req.headers.authorization);
return { user };
}context: async ({ req }) => { const user = await getUserFromToken(req.headers.token); return { user }; }
This example sets up a GraphQL server with context that reads user info from request headers. The query returns the current user's name or 'Guest' if no user is found.
const { ApolloServer, gql } = require('apollo-server'); const typeDefs = gql` type Query { currentUserName: String } `; const resolvers = { Query: { currentUserName: (parent, args, context) => { return context.user ? context.user.name : 'Guest'; } } }; function getUserFromReq(req) { // Simulate user extraction if (req.headers.authorization === 'secret-token') { return { name: 'Alice' }; } return null; } const server = new ApolloServer({ typeDefs, resolvers, context: ({ req }) => { const user = getUserFromReq(req); return { user }; } }); // Simulate a request with authorization header const fakeReq = { headers: { authorization: 'secret-token' } }; server.executeOperation({ query: '{ currentUserName }', contextValue: server.context({ req: fakeReq }) }).then(response => { console.log(response.data.currentUserName); });
Context runs once per request, so avoid putting heavy operations inside it.
Always return a plain object from context for easy access in resolvers.
You can pass extra info like loaders or helpers in context to keep resolvers clean.
Context shares data like user info or database clients across all resolvers.
It runs once per request and returns an object accessible in every resolver.
Use context to keep your GraphQL server organized and secure.