Creating a GraphQL Server with Express and Apollo Server
Tags: webdev, programming, javascript, graphql
Published: 2021-01-25 01:43:16

**Check out my books on Amazon at https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62**

**Subscribe to my email list now at http://jauyeung.net/subscribe/**

Apollo Server is available as a Node package. We can use it to create a server to accept GraphQL requests.

In this article, we’ll look at how to use it with Express to create our own GraphQL server.

### Get started with Apollo Server

We get started by installing the `express-apollo-server`.

To install it with Express, we run:

```
npm install apollo-server-express express
```

Then create an `index.js` file and add:

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

const books = [
  {
    title: 'JavaScript for Dummies',
    author: 'Jane Smith',
  },
  {
    title: 'JavaScript Book',
    author: 'Michael Smith',
  },
];

const typeDefs = gql`
  type Book {
    title: String
    author: String
  }

  type Query {
    books: [Book]
  }
`;

const resolvers = {
  Query: {
    books: () => books,
  },
};

const app = express();
const server = new ApolloServer({ typeDefs, resolvers });
server.applyMiddleware({ app });

app.listen(3000, () => console.log('server started'));
```

In the code above, we created our basic Apollo GraphQL server by creating our data in the `books` array.

Then we used the `gql` tag with our schema definition string passed in to create our schema and assigned it to the `typedefs` constant.

The query type is always required so we can query data from our server. The server won’t run without it.

We created a `Book` type with fields `title` and `author` . Then we created a `books` query to return an array of `Book`s.

Next, we created our `resolvers` so that we can query the data we created. We just created a `books` resolve to return the `books` array.

Finally, we have the following initialization code to load the server:

```
const app = express();
const server = new ApolloServer({ typeDefs, resolvers });
server.applyMiddleware({ app });

app.listen(3000, () => console.log('server started'));
```

Then when we go to `/graphql` in our browser, we see a UI to test our query.

To run the server, we run:

```
node index.js
```

We can test our server by running:

```
{
  books {
    title
    author
  }
}
```

Then when we click the arrow button in the middle, we should get:

```
{
  "data": {
    "books": [
      {
        "title": "JavaScript for Dummies",
        "author": "Jane Smith"
      },
      {
        "title": "JavaScript Book",
        "author": "Michael Smith"
      }
    ]
  }
}
```

as the response.

### Conclusion

We created a simple Apollo GraphQL server with Express by installing the `express` and `express-apollo-server` packages.

Then we created the type definition by passing a string with the type definitions into the `gql` tag.

Once we did that, we created a resolver to return the response which is mapped from the query.

Then we run the server to make the query and return the data. We can test that by going to the `/graphql` page that comes with the Express Apollo server.