首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphQL订阅:调用apolloClient.subscribe时出错

GraphQL订阅:调用apolloClient.subscribe时出错
EN

Stack Overflow用户
提问于 2017-03-17 02:31:00
回答 1查看 1.6K关注 0票数 1

我想我的后端订阅设置是正确的。我在客户端使用了角,当我试图调用subscribe时,我得到了一个错误

代码语言:javascript
复制
passwordUpdatedSubscription = gql`
subscription passwordUpdated{passwordUpdated{name password}}
`;

// Apollo Subscription
var subscription = this.apollo.subscribe({
  query: this.passwordUpdatedSubscription
});

subscription.subscribe(
  {
    next(data) {
      console.log(data);
    },
    error(err) { console.error('err', err); },
  }
);

这就是控制台{"type":"subscription_fail","id":0,"payload":{"errors":[{"message":"Cannot read property 'subscribe' of undefined"}]}}中出现的错误

也许我在后端漏掉了什么?我是否需要在setupFunctions中定义SubscriptionManager

这是我的SubscriptionManager

代码语言:javascript
复制
const sub = require('graphql-subscriptions');
const pubSub = new sub.PubSub();
const manager = new sub.SubscriptionManager({
    schema,
    pubSub
});

这是我在graphQL中的模式

代码语言:javascript
复制
const graphql = require('graphql');

var schema = graphql.buildSchema(`
    type Subscription {
      passwordUpdated: User
    }
    type Mutation {
      setMessage(message: String): String,
      updateUserPassword(userName: String, password: String): User!
    }

    type Query {
      getMessage: String,
      getUsers: [User],
      findUsers(userName: String): [User]
    }

    type User {
        name: String,
        password: String
    }
`);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-18 08:14:15

是的,您缺少安装功能。您可以看看这个链接graphql订阅docu示例

订阅管理器可能如下所示:

代码语言:javascript
复制
const manager = new sub.SubscriptionManager({
  schema,
  pubSub,

  setupFunctions: {
    passwordUpdated: (options, args) => ({ // name of your graphQL subscription
      passwordUpdatedChannel: { // name of your pubsub publish-tag
        filter: () => {
          return true
        },
      },
    }),
  },
});

当您调用pubsub发布函数时,您必须像这样编写它:pubsub.publish("passwordUpdatedChannel")

Sidenode:您可能希望添加已将密码更改为订阅的用户的id。如果您这样做,您可以将它添加到filter选项中,可能类似于下面的filter: (user) => {return user.id === args.userId}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42848194

复制
相关文章

相似问题

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