首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL订阅谜题

GraphQL订阅谜题
EN

Stack Overflow用户
提问于 2018-12-17 04:21:53
回答 1查看 113关注 0票数 0

在客户端使用阿波罗链接,在服务器上使用阿波罗服务器的PubSub .在与GraphQL API对话的mocha测试中得到了奇怪的结果:

摩卡:

代码语言:javascript
复制
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);
  });

服务器:

代码语言:javascript
复制
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发送。

什么鬼东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 18:08:02

我最近刚遇到这个错误。我找到了一个解决方案,我需要发布的对象的字段名与订阅的字段名相匹配。为了说明,请注意架构中的字段名newPost与解析器中的名称匹配,以及要发布到通道的对象的字段名和订阅操作:

代码语言:javascript
复制
// 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
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53808926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档