Apollo Subscription解析器变量为空,订阅过滤失效求助
Apollo订阅变量为空,无法筛选会话通知的问题
问题背景
我编写了一个Apollo resolver用于将用户连接到会话,代码如下:
connectUserToSession: async (_, args) => { const session = await prisma.session.update({ where: { id: Number(args.sessionId) }, data: { players: { connect: { id: Number(args.userId) } } }, include: { players: true, host: true } }) pubsub.publish('USER_JOINED_SESSION', { userJoinedSession: session }) return session },
该resolver执行后,用户可成功连接到会话,且publish操作也已触发。但userJoinedSession订阅未按预期工作,订阅代码如下:
userJoinedSession: { subscribe: withFilter( () => pubsub.asyncIterator('USER_JOINED_SESSION'), (payload, variables) => { console.log('/// START SUBSCRIPTION ////') console.log(payload) console.log('///') console.log(variables) console.log('/// END SUBSCRIPTION ////') }, ), }
日志信息
从日志可以看到,payload包含了新用户加入的会话信息,但variables的值为空对象:
/// START SUBSCRIPTION //// { userJoinedSession: { id: 671, name: 'Talk about dogs', code: '878614', userId: 690, players: [ [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object] ], host: { id: 690, name: 'asdasdas', messageId: null, sessionId: 671 } } } /// {} /// END SUBSCRIPTION //// /// START SUBSCRIPTION //// { userJoinedSession: { id: 671, name: 'Talk about dogs', code: '878614', userId: 690, players: [ [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object] ], host: { id: 690, name: 'asdasdas', messageId: null, sessionId: 671 } } } /// {} /// END SUBSCRIPTION ////
官方说明与需求
根据Apollo官方文档说明:
variables是包含客户端发起订阅时提供的所有参数的对象。
这说明发起订阅时未传入参数,但文档未详细说明正确的实现方式。我的需求是仅向已连接到该会话的用户发送新用户加入的通知,请问如何解决variables为空的问题?
内容的提问来源于stack exchange,提问作者Peter Boomsma
相关产品推荐
相关产品推荐

