mirror of
https://github.com/vale981/apollo-server
synced 2025-03-16 15:56:41 -04:00

* Setup prettier and precommit hooks * Format code with prettier * Use husky because it works... * Move prettier config to .prettierrc file * Implement fixing markdown file formatting when running lint-fix script * Format markdown files * Add .json file formatting * Fixes json file formatting * Add pretteir linting step * Remove tslint * Use gitignore for prettier * Fix linting errors * Ignore submodule folder
77 lines
3.1 KiB
Markdown
77 lines
3.1 KiB
Markdown
---
|
||
title: Koa
|
||
description: Setting up Apollo Server with Koa
|
||
---
|
||
|
||
[](https://badge.fury.io/js/apollo-server-core) [](https://travis-ci.org/apollographql/apollo-server) [](https://coveralls.io/github/apollographql/apollo-server?branch=master) [](https://www.apollographql.com/#slack)
|
||
|
||
This is the Koa integration of Apollo Server. Apollo Server is a community-maintained open-source Apollo Server that works with all Node.js HTTP server frameworks: Express, Connect, Hapi, Koa and Restify. [Read the docs](https://www.apollographql.com/docs/apollo-server/).
|
||
|
||
```sh
|
||
npm install apollo-server-koa
|
||
```
|
||
|
||
## Usage
|
||
|
||
```js
|
||
import koa from 'koa'; // koa@2
|
||
import koaRouter from 'koa-router';
|
||
import koaBody from 'koa-bodyparser';
|
||
import { graphqlKoa } from 'apollo-server-koa';
|
||
|
||
const app = new koa();
|
||
const router = new koaRouter();
|
||
const PORT = 3000;
|
||
|
||
// koaBody is needed just for POST.
|
||
app.use(koaBody());
|
||
|
||
router.post('/graphql', graphqlKoa({ schema: myGraphQLSchema }));
|
||
router.get('/graphql', graphqlKoa({ schema: myGraphQLSchema }));
|
||
|
||
app.use(router.routes());
|
||
app.use(router.allowedMethods());
|
||
app.listen(PORT);
|
||
```
|
||
|
||
### GraphiQL
|
||
|
||
You can also use `apollo-server-koa` for hosting the [GraphiQL](https://github.com/graphql/graphiql) in-browser IDE. Note the difference between `graphqlKoa` and `graphiqlKoa`.
|
||
|
||
```js
|
||
import { graphiqlKoa } from 'apollo-server-koa';
|
||
|
||
// Setup the /graphiql route to show the GraphiQL UI
|
||
router.get(
|
||
'/graphiql',
|
||
graphiqlKoa({
|
||
endpointURL: '/graphql', // a POST endpoint that GraphiQL will make the actual requests to
|
||
}),
|
||
);
|
||
```
|
||
|
||
In case your GraphQL endpoint is protected via authentication, or if you need to pass other custom headers in the request that GraphiQL makes, you can use the [`passHeader`](https://github.com/apollographql/apollo-server/blob/v1.0.2/packages/apollo-server-module-graphiql/src/renderGraphiQL.ts#L17) option – a string that will be added to the request header object.
|
||
|
||
For example:
|
||
|
||
```js
|
||
import { graphiqlKoa } from 'apollo-server-koa';
|
||
|
||
router.get(
|
||
'/graphiql',
|
||
graphiqlKoa({
|
||
endpointURL: '/graphql',
|
||
passHeader: `'Authorization': 'Bearer lorem ipsum'`,
|
||
}),
|
||
);
|
||
```
|
||
|
||
## Principles
|
||
|
||
Apollo Server is built with the following principles in mind:
|
||
|
||
* **By the community, for the community**: Apollo Server's development is driven by the needs of developers
|
||
* **Simplicity**: by keeping things simple, Apollo Server is easier to use, easier to contribute to, and more secure
|
||
* **Performance**: Apollo Server is well-tested and production-ready - no modifications needed
|
||
|
||
Anyone is welcome to contribute to Apollo 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!
|