March 2, 2021

Using Express with GraphQL – How to create a GraphQL server with Node.js/Express

Khalil Stemmler
Developer Advocate
@stemmlerjs
BackendHow-to

One of the fastest ways to get up and running with GraphQL is to install Apollo Server as middleware on your new or existing HTTP server.

In this short post, we demonstrate how to use Apollo Server to create a GraphQL server with Express.js using the apollo-server-express package. At the end, we’ll discuss the tradeoffs of this approach.

Using Apollo Server with Express

Let’s start with the dependencies.

Install dependencies

You’ll need the apollo-server-express and graphql packages.

npm install apollo-server-express graphql --save

Example

The way we set up a GraphQL server using apollo-server-express is very similar to the barebones approach of using the apollo-server package.

The only difference is that we apply the Apollo Server instance as middleware to an Express HTTP instance with server.applyMiddleware({ app }).

const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');

// Construct a schema, using GraphQL schema language
const typeDefs = gql`
  type Query {
    hello: String
  }
`;

// Provide resolver functions for your schema fields
const resolvers = {
  Query: {
    hello: () => 'Hello world!',
  },
};

const server = new ApolloServer({ typeDefs, resolvers });

const app = express();
server.applyMiddleware({ app });

app.listen({ port: 4000 }, () =>
  console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`)
);


Your GraphQL API should be running at http://localhost:4000/graphql.

Tradeoffs of using Apollo Server as GraphQL middleware

Advantages

One neat thing about using apollo-server-express instead of apollo-server is that we can serve both REST and GraphQL at the same time using Express.

Serving a GraphQL server within Express also maintains our ability to use Node.js middleware for common problems like rate-limiting, security, and authentication.

Downsides

The biggest downside with this approach is that apollo-server, the standalone GraphQL server, is faster than apollo-server-express. There’s more code to account for in the apollo-server-express integration.

Conclusion

We learned how to set up a GraphQL server with apollo-server-express and discussed some of the tradeoffs. If you’re using a different middleware library like Restify, Hapi, Koa, or Lambdas, check out our docs for details on the other GraphQL API integrations.

Written by

Khalil Stemmler

Follow

Developer Advocate at Apollo GraphQL ⚡ Author of solidbook.io ⚡ Advanced TypeScript & DDD at khalilstemmler.com

Read more by Khalil Stemmler

Stay in our orbit!

Become an Apollo insider and get first access to new features, best practices, and community events. Oh, and no junk mail. Ever.

Make this article better!

Was this post helpful? Have suggestions? Consider so we can improve it for future readers ✨.

Similar posts

April 6, 2021

Unblocking teams to go faster with Apollo Federation

by Matt DeBergalis

Company