GraphQL Yoga v2 documentation (superseded by v5): 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.
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 the Fastify ecosystem with GraphQL Yoga.
See the ecosystem.
Installation
npm i @graphql-yoga/node fastify graphql
yarn add @graphql-yoga/node fastify graphql
pnpm add @graphql-yoga/node fastify graphql
bun add @graphql-yoga/node fastify graphql
Example
import fastify, { FastifyReply, FastifyRequest } from 'fastify'import { createServer } from '@graphql-yoga/node'// This is the fastify instance you have createdconst 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'], async handler(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 Yogaapp.addContentTypeParser('multipart/form-data', {}, (req, payload, done) => done(null))
This site uses cookies for analytics and improving your experience.