2017-12-11 23:11:11 -08:00
---
title: Express / Connect
description: Setting up Apollo Server with Express.js or Connect
---
2016-10-23 01:17:37 -07:00
2018-07-04 01:32:02 +08:00
[](https://badge.fury.io/js/apollo-server-express) [](https://circleci.com/gh/apollographql/apollo-server) [](https://coveralls.io/github/apollographql/apollo-server?branch=master) [](https://www.apollographql.com/#slack )
2017-06-28 23:50:20 -07:00
Remove packages for frameworks that don't yet support 2.0
Previously, we were planning to offer two kinds of APIs in "Apollo Server 2":
middleware functions just like in 1.0, and the new ApolloServer class. We have
not yet implemented ApolloServer for all of our supported web frameworks, so
this meant that the 2.0 version of modules such as apollo-server-koa (which does
not yet have an ApolloServer class) offered very little benefits over
apollo-server-koa@1.0 (as most of the benefits of 2.0 come from ApolloServer).
This is confusing. We are going to improve the current registerServer API so
that there's no real benefit to using a separately-exported middleware directly
rather than creating an ApolloServer and applying it to your web framework. So
the AS 2.0 API will just be ApolloServer. This means it doesn't make sense for
us to publish 2.x versions of the packages that don't yet support this API.
So this commit removes support for the following web frameworks: Adonis, Azure
Functions, Koa, Lambda, Micro, and Restify. (We leave in place Express, Hapi,
and Cloudflare workers.)
This isn't because we don't like these frameworks and don't want them to work
with Apollo Server 2.0! We would love to see each package resurrected and an
ApolloServer implementation built, either during this current 2.x beta phase or
after the official 2.0 release. Deleting these packages for now makes it more
clear which frameworks support 2.0 and which don't, rather than existing in a
state where apollo-server-express@2 has ApolloServer and apollo-server-koa@2
does not.
2018-06-13 13:45:10 -07:00
This is the Express and Connect integration of GraphQL Server. Apollo Server is a community-maintained open-source GraphQL server that works with many Node.js HTTP server frameworks. [Read the docs ](https://www.apollographql.com/docs/apollo-server/ ). [Read the CHANGELOG. ](https://github.com/apollographql/apollo-server/blob/master/CHANGELOG.md )
2017-06-28 23:50:20 -07:00
2017-12-11 23:11:11 -08:00
```sh
2018-07-26 22:20:27 +03:00
npm install apollo-server-express
2017-12-11 23:11:11 -08:00
```
2017-06-28 23:50:20 -07:00
2017-12-11 23:11:11 -08:00
## Express
2017-06-28 23:50:20 -07:00
```js
2018-05-30 14:40:19 -07:00
const express = require('express');
2018-06-22 17:51:56 -07:00
const { ApolloServer, gql } = require('apollo-server-express');
2018-05-30 14:40:19 -07:00
// 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 });
2017-06-28 23:50:20 -07:00
const app = express();
2018-06-22 17:51:56 -07:00
server.applyMiddleware({ app });
2017-06-28 23:50:20 -07:00
2018-06-22 17:51:56 -07:00
app.listen({ port: 4000 }, () =>
console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}` )
2018-07-04 01:32:02 +08:00
);
2017-06-28 23:50:20 -07:00
```
2017-12-11 23:11:11 -08:00
## Connect
2017-06-28 23:50:20 -07:00
```js
2018-06-22 17:51:56 -07:00
const connect = require('connect');
const { ApolloServer, gql } = require('apollo-server-express');
const query = require('qs-middleware');
2017-06-28 23:50:20 -07:00
2018-05-30 14:40:19 -07:00
// Construct a schema, using GraphQL schema language
const typeDefs = gql`
type Query {
hello: String
}
`;
2017-06-28 23:50:20 -07:00
2018-05-30 14:40:19 -07:00
// Provide resolver functions for your schema fields
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
};
2017-06-28 23:50:20 -07:00
2018-05-30 14:40:19 -07:00
const server = new ApolloServer({ typeDefs, resolvers });
const app = connect();
2018-06-22 17:51:56 -07:00
const path = '/graphql';
2017-06-28 23:50:20 -07:00
2018-06-22 17:51:56 -07:00
server.use(query());
server.applyMiddleware({ app, path });
app.listen({ port: 4000 }, () =>
console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}` )
2018-07-04 01:32:02 +08:00
);
2017-06-28 23:50:20 -07:00
```
2017-12-11 23:11:11 -08:00
2018-06-22 17:51:56 -07:00
> Note; `qs-middleware` is only required if running outside of Meteor
2017-12-11 23:11:11 -08:00
## Principles
GraphQL Server is built with the following principles in mind:
* **By the community, for the community**: GraphQL Server's development is driven by the needs of developers
* **Simplicity**: by keeping things simple, GraphQL Server is easier to use, easier to contribute to, and more secure
* **Performance**: GraphQL Server is well-tested and production-ready - no modifications needed
Anyone is welcome to contribute to GraphQL Server, just read [CONTRIBUTING.md ](https://github.com/apollographql/apollo-server/blob/master/CONTRIBUTING.md ), take a look at the [roadmap ](https://github.com/apollographql/apollo-server/blob/master/ROADMAP.md ) and make your first PR!