apollo-server/packages/apollo-server-hapi
David Glasser e4a6e873f8 Remove graphiql support
ApolloServer builds in graphql-playground rather than graphiql, so we no longer
provide middleware for serving GraphiQL.

If this turns out to be an unpopular choice, we can always add support for
graphiql instead of graphql-playground back in later.

We prefer graphql-playground because it allows you to enter HTTP request
headers, view query history, and explicitly supports graphql@0.13.
2018-06-13 14:00:51 -07:00
..
src Remove graphiql support 2018-06-13 14:00:51 -07:00
.npmignore include readme for npm packages 2017-10-23 15:13:31 -07:00
package.json Remove graphiql support 2018-06-13 14:00:51 -07:00
README.md Remove packages for frameworks that don't yet support 2.0 2018-06-13 13:45:10 -07:00
tsconfig.json tsconfig: remove typeRoots from tsconfig and automatic retreival of node types 2018-05-21 15:29:37 -07:00

title description
Hapi Setting up Apollo Server with Hapi

npm version Build Status Coverage Status Get on Slack

This is the Hapi integration of Apollo Server. Apollo Server is a community-maintained open-source Apollo Server that works with many Node.js HTTP server frameworks. Read the docs. Read the CHANGELOG.

npm install apollo-server-hapi@beta

Usage

After constructing Apollo server, a hapi server can be enabled with a call to registerServer. Ensure that autoListen is set to false in the Hapi.server constructor.

The code below requires Hapi 17 or higher.

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

const HOST = 'localhost';

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'hello',
  },
}

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

  await registerServer({
    server,
    //Hapi Server constructor options
    options: {
      host: HOST,
    },
  });

  server.listen().then(({ url }) => {
    console.log(`🚀  Server ready at ${url}`);
  });
}

StartServer().catch(error => console.log(error));

For more advanced use cases or migrating from 1.x, a Hapi server can be constructed and passed into registerServer.

const { ApolloServer, gql, registerServer } = require('apollo-server-hapi');
const Hapi = require('hapi');

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

  const app = new Hapi.server({
    //autoListen must be set to false, since Apollo Server will setup the listener
    autoListen: false,
    host: HOST,
  });

  await registerServer({
    server,
    app,
  });

  server.listen().then(({ url }) => {
    console.log(`🚀  Server ready at ${url}`);
  });
}

StartServer().catch(error => console.log(error));

Context

The context is created for each request. The following code snippet shows the creation of a context. The arguments are the request, the request, and h, the response toolkit.

new ApolloServer({
  typeDefs,
  resolvers,
  context: async ({ request, h }) => {
    return { ... };
  },
})

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, take a look at the roadmap and make your first PR!