Docs / Integrations / Integration with NestJS Integration with NestJS GraphQL Yoga v3 documentation (superseded by v5): Nest (Nest JS) is a progressive Node.js framework for building efficient, reliable and scalable server-side applications.
v5latest v4 v3 v2
This is the documentation for the old GraphQL Yoga v3 We recommend upgrading to the latest GraphQL Yoga v5.
Migrate to GraphQL Yoga v5 .
Nest (Nest JS) is a progressive Node.js framework for building efficient,
reliable and scalable server-side applications.
GraphQL Yoga provides its
own Nest GraphQL Driver that support building
standalone GraphQL APIs and Federation GraphQL APIs (Gateway and Services).
Standalone GraphQL API
Installation
npm yarn pnpm bun
npm i @graphql-yoga/nestjs @nestjs/graphql yarn add @graphql-yoga/nestjs @nestjs/graphql pnpm add @graphql-yoga/nestjs @nestjs/graphql bun add @graphql-yoga/nestjs @nestjs/graphql
Schema-First Approach
With the following Nest project structure:
- src/
- cats/
- cats.graphql
- cats.resolver.ts
- cats.module.ts
- app.module.ts
- main.ts
and the following .graphql schema definition (and its associated resolvers):
type Query {
cats : [ Cat ]
cat ( id : ID ! ): Cat
}
type Mutation {
createCat ( createCatInput : CreateCatInput ): Cat
}
type Subscription {
catCreated : Cat
}
type Owner {
id : Int !
name : String !
age : Int
cats : [ Cat ! ]
}
type Cat {
id : Int
name : String
age : Int
owner : Owner
}
"""
Test comment
"""
input CreateCatInput {
name : String
age : Int
}
Our Yoga Nest GraphQL Module (app.module.ts) will be defined as follows:
import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs'
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
import { CatsModule } from './cats/cats.module'
@ Module ({
imports: [
CatsModule,
GraphQLModule. forRoot < YogaDriverConfig >({
driver: YogaDriver,
typePaths: [ './**/*.graphql' ],
installSubscriptionHandlers: true
})
]
})
export class AppModule {}
More information
on the dedicated example .
Code-First Approach
The code-first approach generates the GraphQL Schema based on resolvers and models.
With the following example Recipe model:
import { Directive, Field, ID, ObjectType } from '@nestjs/graphql'
@ ObjectType ({ description: 'recipe ' })
export class Recipe {
@ Field ( type => ID )
id : string
@ Directive ( '@upper' )
title : string
@ Field ({ nullable: true })
description ?: string
@ Field ()
creationDate : Date
@ Field ( type => [String])
ingredients : string []
}
and the following resolvers:
@ Resolver ( of => Recipe)
export class RecipesResolver {
constructor ( private readonly recipesService : RecipesService ) {}
// ...
@ Query ( returns => [Recipe])
recipes (@ Args () recipesArgs : RecipesArgs ) : Promise < Recipe []> {
return this .recipesService. findAll (recipesArgs)
}
// ...
}
Our Yoga Nest GraphQL Module (app.module.ts) will be defined as follows:
import { YogaDriver, YogaDriverConfig } from '@graphql-yoga/nestjs'
import { Module } from '@nestjs/common'
import { GraphQLModule } from '@nestjs/graphql'
import { RecipesModule } from './recipes/recipes.module'
@ Module ({
imports: [
RecipesModule,
GraphQLModule. forRoot < YogaDriverConfig >({
driver: YogaDriver,
autoSchemaFile: 'schema.gql'
})
]
})
export class AppModule {}
More information
on the dedicated example .
Apollo Federation
Yoga Nest GraphQL integration supports building Apollo Federation Gateway and Services through the
YogaGatewayDriver and YogaFederationDriver drivers.
A complete example
is available in the repository .
YogaGatewayDriver and YogaFederationDriver drivers should be used with graphql@15.
← Koa Next.js →