问题标签 [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.
reactjs - 如何在 React 中为上传和订阅设置 Apollo 客户端?
我想用 React 设置一个 graphql 客户端,用于上传文件和处理来自 graphql 服务器的订阅。文件上传和其他查询运行良好。问题在于订阅。我在浏览器控制台中收到以下错误:
WebSocket connection to 'ws://localhost:3001/subscriptions' failed: Connection closed before receiving a handshake response
我用于apollo-upload-client
文件上传和apollo-link-ws
订阅。
我可以看到 subscriptions-transport-ws建议使用createNetworkInterface
,addGraphQLSubscriptions
但这种方法与apollo-upload-client
仅支持createUploadLink
.
我被困住了。请帮忙。
我这样设置我的客户:
graphql - 用户特定发布(订阅)
这是我遇到的一个小问题,在文档中找不到太多信息。我正在尝试创建私人聊天消息。我们有以下代码来为用户订阅主题:
并发布
我已使用 onConnect 验证用户是否已通过身份验证
例如,当我想为用户订阅特定主题时,这很有效。但是我如何实现私人用户到用户的通信呢?我已经尝试过withFilter
但似乎无法实现用户特定的授权(关于消息)检查。
graphql - 带有 GraphQL Apollo 客户端的订阅组件
我有一个订阅的应用程序已经在使用subscribeToMore
查询组件:
该查询加载了一个消息列表,据我所知,我们将订阅者附加到 ComponentDidMount 中,因此每当我在查询内的列表中添加新元素时,我的订阅将监听订阅并执行我想做的任何事情(在这种情况下将新消息添加到我当前的消息列表中)。
消息组件列表:
我想添加另一个订阅,所以如果我编辑我的消息,信息会实时更新。为了实现这一点,我使用Subscription创建了以下组件
消息组件(我想根据更新的消息添加另一个订阅)
我在服务器上的订阅正在工作,因为我已经在 Query 上订阅了 MESSAGE_CREATED,并且我已经在服务器上测试了我对 MESSAGE_UPDATED 的订阅已被触发。但是,我无法弄清楚为什么 UI 没有显示或 console.log 任何内容,就好像它没有收听订阅一样。
我可以通过订阅组件或 subscribeToMore 来实现这一点吗?
提前致谢
node.js - GraphQL/Prisma 订阅仅针对 DELETE 触发
我已经使用 Prisma 建立了一个项目,用于处理与服务器之间的通信/存储/检索数据。它本质上与此处的示例架构相同。唯一的主要区别是我的解析器没有分成不同的文件,它们都驻留在 index.js 中。
现在,我正在尝试实现订阅,它将捕获对我的模型的所有更改。但在我的一生中,除了 DELETE 操作之外,我无法订阅触发任何其他操作。我已经阅读了多个论坛帖子和示例,但问题仍然存在。
我的 index.js 订阅解析器如下所示:
我的 schema.graphql 看起来像这样:
我一定遗漏了一些东西,因为我在 Prisma 论坛上发现的任何/所有问题都已在 3 月份通过修复解决。我怀疑这可能与 Async prisma 绑定有关,但这只是直觉。
任何帮助将非常感激。
谢谢,
一个
graphql - AppSync订阅授权问题
嗨,我是 aws AppSync 和 GraphQl 的新手。我有订阅问题。我想在发布新帖子时实时收到通知
这是我的 graphql 架构 ``
这是我对潜艇的查询:
我收到错误,提供的关键元素与模式不匹配,在 dynamodb 表中 pk 是 id 并且我生成了映射模板。谢谢
graphql - 订阅 AWS AppSync 中的群组/私人聊天列表
我目前正在评估 AWS AppSync 作为消息传递应用程序的后端解决方案。
用户将有一个视图来探索新的聊天组和一个不同的视图,他们可以在其中看到他们加入的和私人聊天的列表(在列表中应该显示聊天的名称和最后一条消息)。每个聊天当然都会有一个详细视图,其中显示所有消息。
问题是如何设计订阅部分。我发送消息的突变将如下所示:
createMessage(
content: String,
conversationId: ID!,
createdAt: String!,
id: ID!
): Message
根据订阅文档,我只有两种设计订阅的可能性。通过使用对话 ID 作为参数,我订阅所有新消息或来自特定对话的所有新消息。因此,在我的情况下,我需要获取所有用户对话,然后为每个对话进行订阅调用。不知何故,这感觉像是一个问题,但我没有看到不同的方式(例如,目前无法进行自定义过滤(根据此链接))
是否有更好的方法来订阅特定消息子集的新消息(仅在我订阅的对话中)?客户端上可能有 100 多个活动订阅是一个问题吗?
提前感谢卢卡
node.js - GraphQL 订阅 - subscriptionsClient.subscribe 不是函数
所以,我正在尝试创建一个基本的 GraphQL 订阅服务器。请求中的问题导致graphiql。它是-“subscriptionsClient.subscribe 不是函数”。我不明白哪里有问题。
对于我使用过的 GraphQL 订阅服务器:graphql-server-express、subscriptions-transport-ws、graphql-subscriptions
所以,这是你的任务,GraphQL 大师。
代码:
index.js
schema.js
node.js - 测试安全的 graphql 订阅
我正在尝试测试用于在我的应用程序中保护 graphql 订阅的配置。
这是我在ApolloServer
构造函数中的配置:
当我在 GraphQL Playground 中运行订阅时,出现错误:
我先用 header"Authorization": "Bearer MY_TOKEN"
再用进行测试"jwt": "MY_TOKEN"
,但我相信它没有那么简单。
是否有可能在不实现客户端代码的情况下测试我的订阅?
node.js - 如何使用订阅和 AWS AppSync 高效同步 Apollo 的缓存
我在 Node.js 客户端中使用 aws-appsync 来保留数据项的缓存列表。此缓存必须始终可用,包括未连接到 Internet 时。
当我的 Node 应用程序启动时,它会调用一个查询,该查询会从 AppSync 数据源返回整个项目列表。这是由 Apollo 的缓存存储缓存的,它允许将来的查询(使用相同的 GraphQL 查询)仅使用缓存进行。
该应用程序还订阅了能够修改其他客户端列表的突变。当列表中的项目发生更改时,新数据将发送到应用程序。这可以触发重新获取整个列表的原始查询,从而使缓存保持最新。
当只有一项更改时获取整个列表效率不高。如何使缓存保持最新,同时最大限度地减少每次更改时必须获取的数据量?
该解决方案必须提供一个访问缓存数据的单点。这可以是 GraphQL 查询,也可以是直接访问缓存存储。但是,不能选择使用来自多个查询的结果。
Apollo 文档暗示这应该是可能的:
在某些情况下,仅使用 [自动商店更新] 不足以让您的应用程序......正确更新。例如,如果您想在不重新获取整个列表的情况下将某些内容添加到对象列表中...... Apollo Client 无法为您更新现有查询。
它建议的替代方案是重新获取(基本上是我上面描述的)并使用update
回调手动更新存储中的缓存查询结果。
Using
update
使您可以完全控制缓存,允许您以任何您喜欢的方式对数据模型进行更改以响应突变。update
是查询后更新缓存的推荐方式。
但是,这里指的是同一客户端进行的突变,而不是使用订阅在客户端之间同步使用。update
回调选项似乎不适用于订阅(提供更新的项目数据)或查询(可以获取更新的项目数据)。
javascript - 订阅未使用 ApolloServer 连接
我正在尝试使用 ApolloServer (v 2.2.2) 启动和运行订阅。我有一个突然停止工作的设置。当我尝试连接到graphiql
/中的订阅时,Playground
出现错误:
由于我的应用程序中有休息端点,因此我需要 express 但我无法从以下运行中获得最小示例:
其他端点工作正常,但无法创建 WebSocket。据我了解,我不应该使用不同的服务器或端口(请参阅https://www.ably.io/concepts/websockets)。我已经修改过,SubsciptionServer
但这应该由installSubscriptionHandlers
(这里是代码)处理。