Skip to Content

Integration with Hapi

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

Hive Gateway can be integrated easily as a route to the existing Hapi application with a few lines of code.

Example

import http from 'node:http' import { Readable } from 'node:stream' import { createGatewayRuntime } from '@graphql-hive/gateway-runtime' import Hapi from '@hapi/hapi' import { schema } from './my-graphql-schema' interface ServerContext { req: Hapi.Request h: Hapi.ResponseToolkit } const hiveGateway = createGatewayRuntime<ServerContext>(/* Your configuration */) const server = Hapi.server({ port: 4000 }) server.route({ method: '*', path: hiveGateway.graphqlEndpoint, options: { payload: { // let hiveGateway handle the parsing output: 'stream' } }, handler: async (req, h) => { const { status, headers, body } = await hiveGateway.handleNodeRequestAndResponse( req.raw.req, req.raw.res, { req, h } ) const res = h.response( Readable.from(body, { // hapi needs the stream not to be in object mode objectMode: false }) ) for (const [key, val] of headers) { res.header(key, val) } return res.code(status) } }) server.start()

Hive Gateway should now be available at http://localhost:4000/graphql.

Last updated on