The Guild LogoThe Guild Monogram
Docs

Yoga

Fully-featured, simple to set up, performant and extendable GraphQL JavaScript server

Get Started

Integration with Fastify#

Fastify is one of the popular HTTP server frameworks for Node.js. It is a very simple, yet powerful framework that is easy to learn and use. You can easily integrate GraphQL Yoga with Fastify.

So you can benefit from the powerful plugins of Fastify ecosystem with GraphQL Yoga. See the ecosystem

Installation#

yarn add fastify yarn add graphql yarn add @graphql-yoga/node

Example#

import { createServer } from '@graphql-yoga/node' import fastify, { FastifyRequest, FastifyReply } from 'fastify' // This is the fastify instance you have created const app = fastify({ logger: true }) const graphQLServer = createServer<{ req: FastifyRequest reply: FastifyReply }>({ // Integrate Fastify logger logging: { debug: (...args) => args.forEach((arg) => app.log.debug(arg)), info: (...args) => args.forEach((arg) => app.log.info(arg)), warn: (...args) => args.forEach((arg) => app.log.warn(arg)), error: (...args) => args.forEach((arg) => app.log.error(arg)), }, }) /** * We pass the incoming HTTP request to GraphQL Yoga * and handle the response using Fastify's `reply` API * Learn more about `reply` https://www.fastify.io/docs/latest/Reply/ **/ app.route({ url: '/graphql', method: ['GET', 'POST', 'OPTIONS'], handler: async (req, reply) => { // Second parameter adds Fastify's `req` and `reply` to the GraphQL Context const response = await graphQLServer.handleIncomingMessage(req, { req, reply, }) response.headers.forEach((value, key) => { reply.header(key, value) }) reply.status(response.status) reply.send(response.body) return reply }, }) app.listen(4000)

Add dummy content type parser for File Uploads#

Fastify needs to be aware of GraphQL Yoga will handle multipart/form-data requests because otherwise it will throw an error something like Unsupported media type.

// This will allow Fastify to forward multipart requests to GraphQL Yoga app.addContentTypeParser('multipart/form-data', {}, (req, payload, done) => done(null), )

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