Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/SimonDegraeve/hapi-graphql

Create a GraphQL HTTP server with Hapi.
https://github.com/SimonDegraeve/hapi-graphql

Last synced: about 1 month ago
JSON representation

Create a GraphQL HTTP server with Hapi.

Awesome Lists containing this project

README

        

# GraphQL Hapi Plugin

Create a GraphQL HTTP server with [Hapi](http://hapijs.com).
Port from [express-graphql](https://github.com/graphql/express-graphql).

```js
npm install --save hapi-graphql
```

### Example

```js
import Hapi from 'hapi';
import GraphQL from 'hapi-graphql';
import {GraphQLSchema} from 'graphql';

const server = new Hapi.Server();
server.connection({
port: 3000
});

const TestSchema = new GraphQLSchema({});

server.register({
register: GraphQL,
options: {
query: {
# options, see below
},
// OR
//
// query: (request) => ({
// # options, see below
// }),
route: {
path: '/graphql',
config: {}
}
}
}, () =>
server.start(() =>
console.log('Server running at:', server.info.uri)
)
);
```

### Options

The `options` key of `query` accepts the following:

* **`schema`**: A `GraphQLSchema` instance from [`graphql-js`][].
A `schema` *must* be provided.

* **`context`**: A value to pass as the `context` to the `graphql()`
function from [`graphql-js`][].

* **`rootValue`**: A value to pass as the `rootValue` to the `graphql()`
function from [`graphql-js`][].

* **`pretty`**: If `true`, any JSON response will be pretty-printed.

* **`formatError`**: An optional function which will be used to format any
errors produced by fulfilling a GraphQL operation. If no function is
provided, GraphQL's default spec-compliant [`formatError`][] function will
be used.

* **`validationRules`**: Optional additional validation rules queries must
satisfy in addition to those defined by the GraphQL spec.

* **`graphiql`**: If `true`, may present [GraphiQL][] when loaded directly
from a browser (a useful tool for debugging and exploration).

#### Debugging

During development, it's useful to get more information from errors, such as
stack traces. Providing a function to `formatError` enables this:

```js
formatError: error => ({
message: error.message,
locations: error.locations,
stack: error.stack
})
```