首页 > 解决方案 > 订阅收听但未获取数据

问题描述

大家好,我正在使用来自 apollo graphql 的订阅示例代码https://www.apollographql.com/docs/apollo-server/data/subscriptions/ 我创建了一个突变和一个订阅,并且我已经在突变中发布了订阅,但仍然我的订阅中没有收到任何数据。

 //index.js
    const { createServer } =require("http") ;
    const { execute, subscribe } =require("graphql") ;
    const { SubscriptionServer } =require("subscriptions-transport-ws") ;
    const { makeExecutableSchema } =require("@graphql-tools/schema") ;
    const express =require("express") ;
    const { ApolloServer } =require("apollo-server-express") ;
    const { query } = require('./resolvers/queries/query');
    const {subscription} = require('./resolvers/subscriptions/subscription')
    const { mutation } = require('./resolvers/mutations/mutation')
    const typeDefs = require('./schema/schema.js')
    
    
    (async function () {
      const app = express();
      const httpServer = createServer(app);
      const resolvers = {
        Query: query,
        Mutation:mutation,
        Subscription:subscription
      };  
      const schema = makeExecutableSchema({
        typeDefs,
        resolvers,
      });
      var server = new ApolloServer({
        schema, 
      });
      const subscriptionServer = SubscriptionServer.create(
        { schema, execute, subscribe },
        { server: httpServer, path: server.graphqlPath }
      );
    
      server = new ApolloServer({
        schema,
        plugins: [{
          async serverWillStart() {
            return {
              async drainServer() {
                subscriptionServer.close();
              }
            };
          }
        }],
      });
      await server.start();
      server.applyMiddleware({ app });
    
      const PORT = 4000;
      httpServer.listen(PORT, () =>
        console.log(`Server is now running on http://localhost:${PORT}/graphql`)
      );
    })();



//subscription.js
        const {PubSub} =require('graphql-subscriptions')
        
        const pubSub = new PubSub()
        
        const subscription={
            messageAdded:{
                subscribe:()=> pubSub.asyncIterator("MESSAGE_ADDED")
            }
        }
        
        module.exports={subscription}

[![//mutation file code     
    const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
const cuid=require('cuid')
const {PubSub} =require('graphql-subscriptions')

const pubSub = new PubSub()


const createMessage=async(_,args,__,___)=>{
      let message_data={
        id:cuid(),
        from:cuid(),//args.user_id,
        to:cuid(),//args.to_user_id,
        message:args.message,
        createdAt:new Date()
      }
      try{
        var message= await prisma.messages.create({ data: message_data })
        var message_db = await prisma.messages.findUnique({
                where: {
                  id: message_data.id
                },
              })
        pubSub.publish('MESSAGE_ADDED',{messageAdded:message_db})// MESSAGE_ADDED from  subscribe:()=> pubSub.asyncIterator('MESSAGE_ADDED') , both must be same
        console.log('message added')          //messageAdded from schema
      }catch(e){
          console.log(e)
      }
      return message
  }

标签: graphqlapolloapollo-servergraphql-js

解决方案


推荐阅读