On this page

Integration with Hapi

GraphQL Yoga v3 documentation (superseded by v5): Hapi allows you to build powerful, scalable applications, with minimal overhead and full out-of-the-box functionality - your code, your way.

Hapi allows you to build powerful, scalable applications, with minimal overhead and full out-of-the-box functionality - your code, your way.

It continues to be the proven choice for enterprise-grade backend needs.

Installation

npm i @hapi/hapi
npm i graphql
npm i graphql-yoga

Example

import http from 'node:http'
import { Readable } from 'node:stream'
import { createSchema, createYoga } from 'graphql-yoga'
import Hapi from '@hapi/hapi'
import { schema } from './my-graphql-schema'

interface ServerContext {
  req: Hapi.Request
  h: Hapi.ResponseToolkit
}

const yoga = createYoga<ServerContext>({ schema })

const server = Hapi.server({ port: 4000 })

server.route({
  method: '*',
  path: yoga.graphqlEndpoint,
  options: {
    payload: {
      // let yoga handle the parsing
      output: 'stream'
    }
  },
  handler: async (req, h) => {
    const { status, headers, body } = await yoga.handleNodeRequest(
      // will be an incoming message because the payload output option is stream
      req.payload as http.IncomingMessage,
      { req, h }
    )

    const res = h.response().code(status)
    for (const [key, val] of headers) {
      res.header(key, val)
    }

    return Readable.from(body, {
      // stream cannot be in object mode
      objectMode: false
    })
  }
})

server.start()

The GraphQL Yoga server should now be available at http://localhost:4000/graphql.

You can also check a full example on our GitHub repository here.