javascript - Apollo 订阅无效

标签 javascript graphql apollo graphql-subscriptions

我有一个 graphql 服务器,我试图在实体状态更新时触发一个事件。我有一个用于更新实体的突变,它使用 graphql-subscriptions 发布更新以供订阅者收听。但是,pubsub.subscribe(EVENT_NAME) 接受了更改,但是当我将其集成到订阅解析器中时,它不会触发更新。

为简洁起见,我已经编辑了与问题无关的部分代码。

我的解析器:

Mutation: {
  updateStatus(_, { id, status, hash }) {
    return repository.updateStatus(id, status, hash);
  }
},
Subscription: {
  updatedStatus: {
    subscribe: () => pubsub.asyncIterator('updatedStatus'),
  }
},

我的仓库:

export const updateStatus = async function(id: String, status: String, hash: String) {
  try {
    const res = await fetch(`${baseURL}/article/${id}/status?publish_hash=${hash}`, {
      headers,
      method: 'PATCH',
      body: JSON.stringify({ status })
    });

    const article = await fetchSingleArticle(id, 'XML', headers.channel, false);

    await pubsub.publish('updatedStatus', article);
    return article;
  } catch (e) {
    console.log(e.message);
  }
}

我的模式:

type Mutation {
  updateStatus(id: ID!, status: PublishingStatus = PUBLISHING, hash: String): Article
}

type Subscription {
  updatedStatus(id: ID!): Article
}

schema {
  query: Query
  mutation: Mutation
  subscription: Subscription
}

为了对此进行测试,我只使用了 graphiql,它可以很好地获取 websocket 连接。

我尝试使用 article(如图所示)和 {updatedStatus: article} 进行发布,但似乎都没有成功。

如前所述,pubsub.subscribe('updatedStatus') 确实接收到更改。所以这个问题似乎与订阅解析器有关。

我将关闭以下文档:http://dev.apollodata.com/tools/graphql-subscriptions/setup.html#setup

最佳答案

原来我使用的是过时的 graphql 包!更新到最新版本解决了这个问题。

关于javascript - Apollo 订阅无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44970081/

相关文章:

javascript - 如何修复类型错误: Cannot read property 'push' of undefined

javascript - 如何跨多个模块访问 Node acl?

node.js - 如何将请求 header 传递给 graphql 解析器

authentication - 使用 JWT 使用 Asp.net 核心进行 GraphQL 身份验证

node.js - Apollo 服务器在等待流数据时超时

javascript - JS如何隐藏页面的所有分类

javascript - 全局函数中的局部变量

graphql - 突变的 Apollo react 未定义

javascript - React Apollo - 取消订阅查询

graphql - 如何设置 Apollo GraphQL 服务器接受对象作为突变变量?