Skip to main content

Command Palette

Search for a command to run...

Implementing GraphQL Subscriptions with NestJS

Published
2 min read
Implementing GraphQL Subscriptions with NestJS

Today, let's explore how to implement GraphQL subscriptions in NestJS. GraphQL subscriptions allow clients to receive real-time updates from the server, making them ideal for applications that require live data updates.

Setting Up Your NestJS Project

If you haven't already, make sure you have NestJS installed globally:

npm install -g @nestjs/cli

Then, create a new NestJS project:

nest new my-api-project
cd my-api-project

Setting Up GraphQL

First, let's install the necessary packages for GraphQL:

npm install @nestjs/graphql graphql-tools graphql

Next, update the AppModule to enable GraphQL:

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: true,
      playground: true,
      installSubscriptionHandlers: true,
    }),
  ],
})

export class AppModule {}

The installSubscriptionHandlers: true option enables WebSocket support for subscriptions.

Creating a Subscription

Let's create a simple subscription that publishes a message every second:

import { Resolver, Subscription } from '@nestjs/graphql';
import { PubSub } from 'graphql-subscriptions';
const pubSub = new PubSub();

@Resolver()
export class MessageResolver {
  @Subscription(() => String)
  messageAdded(): AsyncIterator<string> {
    return pubSub.asyncIterator('messageAdded');
  }

  triggerMessageAdded(): void {
    setInterval(() => {
     pubSub.publish('messageAdded', { messageAdded: 'New message'});
    }, 1000);
  }
}

In this example, we've defined a subscription messageAdded that returns a new message every second.

Starting the Application

To start NestJS application, run:

npm run start

Testing the Subscription

You can test the subscription using a GraphQL client like Altair or GraphQL Playground. Open the GraphQL Playground (`http://localhost:3000/graphql`) and run the following subscription query:

subscription {
   messageAdded
}

You should see a new message being returned every second. We've explored how to implement GraphQL subscriptions in NestJS. Subscriptions allow clients to receive real-time updates from the server, making them a powerful tool for building interactive and responsive applications.

8 views

More from this blog

Brijesh Yadav

23 posts