在客户端使用阿波罗链接,在服务器上使用阿波罗服务器的PubSub .在与GraphQL API对话的mocha测试中得到了奇怪的结果:
摩卡:
import { execute, makePromise } from 'apollo-link';
const uri = 'http://localhost:3001/graphql';
const link = new HttpLink({ uri, fetch });
const subscribe = (query, handlers) => {
const operation = {
query: gql`${query}`,
};
return execute(link, operation).subscribe(handlers);
};
const handlers = {
next: (data) => {
console.log(`received data: ${Date.now()}, ${JSON.stringify(data, null, 2)}`);
},
error: error => console.log(`received error ${error}`),
complete: () => console.log('complete'),
};
it('subscribe', async () => {
const query = `subscription {
info
}`;
subscribe(query, handlers);
});服务器:
try {
console.log('subscription =>| ', Date.now(), '|', line);
worker.pubsub.publish('infoTopic', { info: line });
} catch (e) {
console.error(e);
}下面是我(从测试中)看到的:
接收到的数据: 1545013826838,{“错误”:[{“消息”:“不能为非空字段Subscription.info返回null”,.
(来自服务器):
订阅=>| 1545013826887信息深度1选择深度1.
订阅者以826838接收,而publisher则以826887发送。
什么鬼东西?
发布于 2019-05-10 18:08:02
我最近刚遇到这个错误。我找到了一个解决方案,我需要发布的对象的字段名与订阅的字段名相匹配。为了说明,请注意架构中的字段名newPost与解析器中的名称匹配,以及要发布到通道的对象的字段名和订阅操作:
// schema
type Subscription {
newPost: Post!
}
// subscription resolver
newPost: {
subscribe(parent, args, { pubsub }, info)
return pubsub.asyncIterator('new post')
}
}
// in the event publisher
pubsub.publish('new post', { newPost: post })
// the subscription operation
subscription {
newPost {
id
title
body
published
}
}https://stackoverflow.com/questions/53808926
复制相似问题