es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Strapi admite suscripciones de GraphQL?

Estoy utilizando un CMS sin interfaz (strapi) para mi backend. Mi requisito es enviar una notificación al cliente una vez que se crea un comentario en el backend.

Necesito saber si strapi admite suscripciones graphql (si es así, ¿puede compartir un código de ejemplo?) o si existe un enfoque mejor para resolver esto.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, strapi admite suscripciones graphql. Aquí hay un código de muestra para comenzar a implementarlo:

    1. Primero, necesitamos instalar los paquetes necesarios:

    npm install graphql-yoga

    1. Cree un archivo server.js y agregue el siguiente código:
    const { GraphQLServer } = require('graphql-yoga');
    const strapi = require('strapi-sdk-javascript');
    
    const strapiEndpoint = 'http://localhost:1337';
    const strapiClient = strapi(strapiEndpoint);
    
    const typeDefs = `
      type Query {
        hello: String
      }
    
      type Subscription {
        newComment: Comment
      }
    
      type Comment {
        id: ID!
        text: String!
      }
    `;
    
    const COMMENT_ADDED = 'COMMENT_ADDED';
    
    const resolvers = {
      Query: {
        hello: () => '¡Hola mundo!'
      },
      Subscription: {
        newComment: {
          subscribe: (_, __, { pubsub }) => {
            return pubsub.asyncIterator([COMMENT_ADDED]);
          }
        }
      }
    };
    
    const pubsub = new PubSub();
    
    const server = new GraphQLServer({
      typeDefs,
      resolvers,
      context: ({ request, response }) => {
        return {
          pubsub,
          strapi: strapiClient
        };
      }
    });
    
    const options = {
      port: process.env.PORT || 4000
    };
    
    server.start(options, ({ port }) =>
      console.log(`Servidor iniciado, escuchando en el puerto ${port}...`)
    );
    
    strapiClient.init(process.env.STRAPI_ENDPOINT);
    strapiClient.socket.on('comment', () =>
      pubsub.publish(COMMENT_ADDED, { newComment: { text: '¡Se agregó un nuevo comentario!' } })
    );
    
    1. Este código configura un servidor GraphQL utilizando el paquete graphql-yoga. Definimos nuestro esquema utilizando definiciones de tipo, incluyendo un nuevo tipo para el objeto Comentario.
    2. También definimos un tipo Subscription que incluye la suscripción newComment. Esta suscripción se activa cada vez que se agrega un nuevo comentario en el backend.

    3. En el objeto resolvers, definimos el resolvedor de suscripción para newComment. Este resolvedor escucha el evento COMMENT_ADDED y devuelve un iterador asíncrono para manejar la suscripción.

    4. A continuación, inicializamos una nueva instancia de la clase PubSub del paquete graphql-subscriptions. Esta clase se utiliza para gestionar las suscripciones.

    5. Por último, iniciamos el servidor GraphQL, pasando un objeto de opciones con una propiedad de puerto. También inicializamos strapiClient y escuchamos el evento comment, que activa el evento COMMENT_ADDED en el objeto pubsub.

    Con este código, ahora puede usar un cliente GraphQL para suscribirse a newComment y recibir notificaciones cada vez que se crea un nuevo comentario en el backend.

Comments are closed.