This is useful if you need to attach objects to your context on a per-request basis, for example to initialize user data, caching tools like dataloader, or set up some API keys.

Options API

The GraphQLOptions object has the following properties:

schema

The GraphQL.js schema object that represents your GraphQL schema. You can create this directly using GraphQL.js, the reference GraphQL implementation, or you can use graphql-tools, which makes it simple to combine a schema and resolvers. See an example.

context

The context is an object that's accessible in every single resolver as the third argument. This is a great place to pass information that depends on the current request. Read more about resolvers and their arguments in the graphql-tools docs. Here's an example:

Passing context as a function

The value passed to context can also be a function. No arguments are passed the function, but this can be useful for constructing a new context on each request (for example, creating a new instance of a class).

app.use('/graphql',
bodyParser.json(),graphqlExpress({
schema: myGraphQLSchema,context:()=>({// Create a new instance of the user class for each request
user:newUser(),}),// other options here}),);

rootValue

This is the value passed as the obj argument into the root resolvers. Read more about resolvers and their arguments in the graphql-tools docs. Note: This feature is not often used, since in most cases context is a better option to pass per-request data into resolvers.

formatError

A function to format errors before they are returned to the client. GraphQL does some processing on errors by default, and this is a great place to customize that. You can also access the original thrown error on the .originalError property: