GraphQL en NestJS: Actualizaciones en tiempo real

GraphQL en NestJS

Actualizaciones en tiempo real en NestJS: una guía completa para las suscripciones de GraphQL

GraphQL en NestJS – En este artículo, le mostraremos cómo usar las suscripciones de GraphQL en una aplicación NestJS.

Las suscripciones de GraphQL son una característica poderosa que permite enviar actualizaciones en tiempo real a los clientes que se han suscrito a ciertos eventos. NestJS es un marco de Node.js para crear aplicaciones del lado del servidor escalables y eficientes.


Instalación

Para usar las suscripciones de GraphQL en NestJS, primero debemos instalar los paquetes necesarios.

npm install @nestjs/graphql apollo-server-express graphql-subscriptions

Configuración de un servidor GraphQL

Para configurar un servidor GraphQL en NestJS, necesitamos crear un módulo que importe GraphQLModule desde @nestjs/graphql y lo configure con las opciones necesarias.

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

@Module({
imports: [
GraphQLModule.forRoot({
typePaths: ['./**/*.graphql'],
subscriptions: {
onConnect: (connectionParams, webSocket) => {
// handle connection auth
},
onDisconnect: (webSocket, context) => {
// handle disconnection
},
},
}),
],
})
export class AppModule {}

En este ejemplo, la opción typePaths le dice a GraphQLModule que busque archivos de esquema de GraphQL en el directorio raíz del proyecto y en todos los subdirectorios. La opción de subscriptions es donde configuramos los controladores de eventos relacionados con las suscripciones. La función onConnect se llama cuando un cliente establece una conexión y la función onDisconnect se llama cuando un cliente se desconecta.

Definición del tipo de suscripción y resolución

Para definir una suscripción en GraphQL, necesitamos crear un nuevo tipo en nuestro esquema con la palabra clave de suscripción y un campo que define el evento que escucha la suscripción.

type Subscription {
newMessage: Message
}

También necesitamos definir un resolver para la suscripción.

import { PubSub } from 'graphql-subscriptions';
const pubSub = new PubSub();

@Resolver('Subscription')
export class SubscriptionResolver {
@Subscription('newMessage')
newMessage() {
return {
subscribe: () => pubSub.asyncIterator('NEW_MESSAGE'),
};
}
}

En este ejemplo, importamos la clase PubSub del paquete graphql-subscriptions y creamos una instancia de la misma. La resolución de newMessage devuelve un objeto con un solo campo, subscribe, que es una función que devuelve un iterador asíncrono que escucha el evento NEW_MESSAGE.

Publicación de eventos

Para que un cliente reciba actualizaciones, necesitamos publicar eventos para los suscriptores.

import { Injectable } from '@nestjs/common';
import { PubSub } from 'graphql-subscriptions';
const pubSub = new PubSub();

@Injectable()
export class MessageService {
addMessage(message: string) {
pubSub.publish('NEW_MESSASAGE', { newMessage: message });
}
}

En este ejemplo, tenemos un MessageService que tiene un método llamado addMessage que toma una cadena de mensaje y la publica como la carga útil del evento NEW_MESSAGE. Suscripción en el cliente Finalmente, el cliente puede suscribirse al evento enviando una consulta de suscripción con el nombre del evento deseado.

Manejo de errores

Para manejar los errores que pueden ocurrir durante la suscripción, puede agregar una función onError al objeto de suscripciones en la configuración de GraphQLModule.

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

@Module({
imports: [
GraphQLModule.forRoot({
typePaths: ['./**/*.graphql'],
subscriptions: {
onConnect: (connectionParams, webSocket) => {
// handle connection auth
},
onDisconnect: (webSocket, context) => {
// handle disconnection
},
onError: (error, message, webSocket) => {
// handle subscription errors
},
},
}),
],
})
export class AppModule {}

En este ejemplo, la función onError toma el error que ocurrió, el objeto del mensaje y el webSocket. Puede usar esta función para registrar el error o enviarlo a un servicio de seguimiento de errores, y también para notificar al cliente sobre el error.

Conclusión

¡Eso es todo! Con estos pasos, ahora debería tener una comprensión básica de cómo usar las suscripciones de GraphQL en una aplicación NestJS.

  • Tenga en cuenta que este es solo un punto de partida
    • Es probable que necesite agregar más funciones y manejar casos más complejos para su caso de uso específico.
  • Algunas cosas adicionales que puede considerar al trabajar con suscripciones incluyen:
    • el manejo de la autenticación y la autorización,
    • el uso de una biblioteca pub/sub más robusta
    • y la implementación de una forma de darse de baja de las suscripciones.

Espero que este artículo haya sido útil para comprender cómo usar las suscripciones de GraphQL en una aplicación NestJS. Si tiene alguna pregunta o necesita más aclaraciones, no dude en comunicarse.


Gracias por llegar hasta aquí, si encuentras esto útil no olvides dejar un👍🏼y suscribirse para recibir más contenido.

Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre Node.js y AWS Lambda:

Recent Post