GraphQL Yoga v3 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.
So you can benefit from the powerful plugins of Fastify ecosystem with GraphQL Yoga.
See the ecosystem
Installation
npm i fastify
yarn add fastify
pnpm add fastify
bun add fastify
npm i graphql
yarn add graphql
pnpm add graphql
bun add graphql
npm i graphql-yoga
yarn add graphql-yoga
pnpm add graphql-yoga
bun add graphql-yoga
Example
import fastify, { FastifyReply, FastifyRequest } from 'fastify'import { createYoga } from 'graphql-yoga'// This is the fastify instance you have createdconst app = fastify({ logger: true })const yoga = createYoga<{ 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({ // Bind to the Yoga's endpoint to avoid rendering on any path url: yoga.graphqlEndpoint, method: ['GET', 'POST', 'OPTIONS'], handler: async (req, reply) => { // Second parameter adds Fastify's `req` and `reply` to the GraphQL Context const response = await yoga.handleNodeRequest(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))
You can also check a full example on our GitHub repository
here
This site uses cookies for analytics and improving your experience.