Express

Express is a popular node.js web server library. Mocks loaded into a GraphQLHandler can be integrated with express, via @graphql-mocks/network-express, to provide a live running server. This is useful when needing a live endpoint to test against or hosting mocks to share with others.

Installation

Install the express and @graphql-mocks/network-express npm packages.

# npm
npm install --save-dev express @graphql-mocks/network-express
# yarn
yarn add --dev express @graphql-mocks/network-express

Usage

Use expressMiddleware from @graphql-mocks/network-express as an application-level middleware or router middleware.

This example sets up a file server.js using an express server with the expressMiddleware as an application-middleware, listening on port 8080.

// server.js
const { GraphQLHandler } = require('graphql-mocks');
const { expressMiddleware } = require('@graphql-mocks/network-express');
const express = require('express');
const graphqlHandler = new GraphQLHandler({
dependencies: { graphqlSchema }
};
const app = express();
app.post('/graphql', expressMiddleware(graphqlHandler));
const port = 8080;
app.listen(port);

Start the express app.

node server

The server will now be responding to graphql POST requests at http://localhost:8080/graphql.

For example, making a request using fetch (in the browser or via node-fetch)

fetch('http://localhost:8080/graphql, {
method: 'POST',
body: JSON.stringify({
// required
query: `
query {
# graphql query
}
`,
// optional
variables: {},
// optional
operationName: 'OperationName'
})
}).then(async (response) => {
// get the final json payload
const result = await response.json();
return result;
});

See the GraphQL docs for details on these body parameters, and making http requests.

Resolver Context

The express request and response objects are available on the resolver context argument, under the express property.

function resolver(parent, args, context, info) {
const { req, res } = context.express;
}

API Documentation

See the API Documentation for types and more details.