graphql - 订阅收听但未获取数据
问题描述
大家好,我正在使用来自 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
}
解决方案
推荐阅读
- performance - 程序运行时分析中“冷点”与“热点”的定义是什么?
- r - 在 R 中操作向量和数据框
- c# - 日期格式 Windows 10 v.1703 的问题 CreateProcessWithLogonW
- sql-server - JOIN 共享相同主键的多个表
- java - AWS Lambda Java 应用程序
- xamarin - FFImageLoading, SVGCachedImage 从绑定设置 HeightRequest/WidthRequest 时模糊
- node.js - 无法在 Cloud9 中使用 Node.js 获得 Hello World
- wso2 - WSO2 EI:有没有办法使用丰富的调解器在 JSON 中为数组添加值
- java - Gson 无法在我的对象中投射“对象”类
- python - allocateIds() 如何在 Cloud Datastore 模式下工作?