问题标签 [graphql-subscriptions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
706 浏览

microservices - 使用 graphql 订阅和微服务的授权(不是身份验证!)模式

我已经创建了一个带有 graphql-subscriptions 的 apollo-server,到目前为止一切都很好。我可以在前端接收出版物。伟大的!

我现在要做的只是将出版物发送给授权用户,因此需要进行某种逻辑/测试。但是在哪里以及如何?我见过的所有示例和事情都涉及盲目地从 redis 服务器接收消息,并将其设置回客户端。我可以测试哪个用户登录了,但现在呢?各个微服务将与身份验证/用户服务对话,并据此决定允许的操作。没问题。但是如何阻止 redis 广播到达错误的用户?apollo-server 所做的只是监听来自 redis 的消息——而不是验证它们。

我唯一能真正想到的就是在每次广播中都有某种权限对象字段,并使用 graphql 来针对 auth 服务对其进行验证。似乎不对。我希望我的身份验证在微服务中完成。任何指向我正确方向的东西都会很棒。

0 投票
2 回答
844 浏览

passport.js - 如何使用 subscriptions-transport-ws 与护照和快速会话

我正在使用适用于快递的护照本地策略:

这个 localStrategy 正在执行 Mongoose 调用以根据用户的 pubKey 获取用户,我猜 request.user 是通过这种方式填充的。

我像这样设置我的graphql端点:

我的订阅是这样的:

我的会话在 graphql 查询和突变方面运行良好。但不是我的订阅。

我的目标是在我的订阅解析器上下文中访问我的用户会话。我可能需要访问 onConnect 中的 request.user 之类的东西来填充上下文,但我不知道该怎么做。

0 投票
1 回答
432 浏览

graphql - GraphQL 订阅不执行嵌套的解析器

有一个

  • 查询播放器
  • 订阅playerJoinedTable

两者都应该返回PlayerType并且都接收具有属性profileId的对象。

PlayerType 具有解析器的属性配置文件

当服务器被要求查询玩家时,它会返回玩家表中的字段和带有配置文件字段的配置文件对象。

但是在下面订阅时:

执行时,服务器只返回玩家自己的字段,而不执行配置文件的解析器。

输出: 在此处输入图像描述

知道为什么订阅不执行嵌套解析器吗?

0 投票
0 回答
180 浏览

graphql - Relay Modern 订阅:以增量方式返回记录多次

我正在开发一个非常简单的应用程序,其中包含帖子和对这些帖子的评论。我有

1)comment_mutation.js(服务器端 - 我正在使用 pubsub 发布保存的评论)。我删除了不必要的代码

2)CommentSubscription.js(服务器端) - 获取订阅并根据 postId 过滤它。

服务器端运行良好。每当创建任何评论时,它都会将结果发布到订阅。订阅会捕获它并显示结果。

现在客户端:

1) CommentMutaton.js - 客户端。每当用户自己在客户端创建评论(反应原生)时,它都会很好地更新商店。

2)CommentSubscription.js(客户端)

问题出在客户端。每当我在服务器端创建评论时,我都可以在客户端正确地看到第一条评论。当我在服务器端发送另一条评论时,我可以在客户端看到 2 条相同的评论。当我第三次发送评论时,我可以在客户端看到 3 条相同的评论。是否意味着:

每次comment_mutation.js(在服务器端)运行时,它都会在现有订阅之外创建一个新订阅。这是我能想到的唯一合乎逻辑的解释。

我注释掉了 CommentMutation.js 的更新函数(在客户端),但仍然看到这个错误。任何帮助都感激不尽。

0 投票
1 回答
969 浏览

graphql - 为什么 GraphQL 订阅使用 AsyncIterator?

AsyncIterator需要使用.next(). 但是对于 websockets,我通常想在事件发生时推送数据。我唯一能想到的是,通过使用基于拉的,他们可以限制速率。

那么什么叫.next()呢?它是一个计时器,还是它侦听发布消息,排队,然后调用.next()直到它消耗所有队列?

这是否适用于实时数据,例如地图上的 GPS 位置?

看了这里还是想不通:https ://github.com/facebook/graphql/blob/master/rfcs/Subscriptions.md

来自 Apollo 的 GraphQL 订阅回购:https ://github.com/apollographql/graphql-subscriptions

0 投票
1 回答
516 浏览

google-app-engine - 如何将 GraphQL 订阅单独分离到另一台服务器

我计划在 Google App Engine (GAE) 上使用 Apollo-Graphql。所以我不必担心缩放(我将使用 Redis 或其他一些 pubsub)。但是,问题是 GAE 不支持 Web 套接字。我大量使用 GraphQL 订阅。

Google 建议将 Web 套接字分离到另一个 VM(如 Google Compute Engine)中,并将其余部分保留在 GAE 中:https ://cloud.google.com/solutions/real-time-gaming-with-node-js-websocket

是否可以在 Apollo Server 上执行此操作?我正在使用节点 js apollo-server-express

0 投票
1 回答
291 浏览

reactjs - 每当我的 Apollo 订阅在 React 中被触发时,我如何调用函数?

我有一个反应组件,它在 apollo graphql 查询上使用 subscribeToMore 方法来更新自身的变化。这样做很好,但是我想在订阅进行更改时调用一些外部函数。我想在 UI 中显示一些事情已经改变的提示,让我们调用我们的函数“onUpdate”,我在哪里调用这个 onUpdate 函数?

我的组件在渲染函数之前有一些看起来像这样的代码:

我应该把我的 onUpdate 函数放在这里还是其他地方?

如果在另一个问题中回答了这个问题,请原谅我,但我能找到的所有其他问题似乎都在询问如何更新查询的缓存或如何让订阅首先工作。

0 投票
1 回答
611 浏览

graphql - 如何为 graphql 订阅服务器定义上下文对象

使用普通的 graphql 服务器,我们可以像这样定义上下文对象:

**订阅服务器**

我怎样才能为订阅服务器做同样的事情?(做混合http / websocket方法)。似乎无法从文档中找到解决方案。

0 投票
0 回答
867 浏览

graphql - Graphql-js 订阅单元测试未按预期工作

我已经为 graphql-js 订阅编写了集成测试,这些测试显示出奇怪的行为。

我的 graphq-js 订阅在 GraphiQL 中完美运行。但是当从单元测试中调用相同的订阅时,它会失败。

Ggraphql-Js 对象,具有解析功能和订阅功能

};

订阅查询

突变查询

集成测试

此处的问题 在运行测试时,resolve函数中的有效负载包含全局数据,而它应该包含订阅有效负载。所以代码中断了。

0 投票
1 回答
1088 浏览

javascript - 用于删除和更新的 React GraphQL 订阅

我正在尝试GraphQL Apollo在 API中使用,以便在我的项目subscriptions 中更快、更实时地更新。React我正在使用"subscriptions-transport-ws": "^0.8.2". 但是删除和更新会引发错误。我对反应和 JS 很陌生,无法完成这项工作。我尝试寻找解决方案,但还没有运气!

这是基本的前端布局: 在此处输入图像描述

这是相关的反应组件代码graphql subscriptions

但我面临以下错误:

删除按钮错误: TypeError: Cannot add/remove sealed array elements

在此处输入图像描述

和更新按钮错误: Cannot assign to read only property 'Posts' of object '#<Object>'

在此处输入图像描述

有人可以帮我通过 graphql 订阅获取组件的实时更新吗?