问题标签 [apollostack]
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.
graphql - Apollo GraphQL 错误处理
我正在使用 apollographql/graphql-server。服务器响应如下所示:
我有两个问题:
我发现我可以抛出或返回一个 Error 对象,它将被推送到响应的错误数组中,但是一旦我这样做,就会发送响应。如何返回多个错误?
错误数组是否应该仅用于应用程序或服务器错误,例如错误?数据检查和验证错误是否应该放在数据对象中?
提前致谢!
ruby-on-rails - apollo graphql 在 rails + actioncable + redis pubsub 上的订阅
我正在尝试使用apollo + Rails actioncable(redis pubsub 后端)归档 graphql 订阅。
问题
目前,我正在使用graphql-rubyquery
并且做得mutation
很好,但是 gem 不支持subscription
.
想法
我对graphql和redis只有一点了解,所以这听起来可能很愚蠢,但我在想如果我设置一个单独的graphql服务器(仅用于subscription
),它连接到rails正在使用的同一个redis数据库,从rails广播' 对 redis 的可操作电缆应该由 graphql 服务器拾取?
导轨
像往常一样发送哈希数据broadcast
,没有变化。
分离的graphql服务器
以某种方式使用带有 Redis Pub Sub 的 GraphQL 订阅设置一个 graphql 服务器,并通过 redis 等待 rails 的广播。
这一切可行吗?
还是有其他可能的方法来在 Rails 中实现 graphql 订阅?
angular - watchQuery (Angular-Apollo) 的缓存管理
我在使用 Apollo 和 Angular 2 组合分页、预取和重新获取数据时遇到问题。我在应用程序中的预期行为是服务器和客户端之间的数据永远不应该有任何差异。我想通过在菜单中预取数据 onmouseover 来减少用户的加载时间,并在每个组件中都有一个微调器/加载屏幕来隐藏内容,直到数据被获取。如果一个组件已经被访问过,我想触发一次重取而不是预取 onmouseover,以便客户端与服务器匹配。
今天,如果我导航到一个组件并分页到例如显示该组数据的第三页,然后导航到另一个组件,然后再次返回到第一个组件(在完成新数据的获取之前),我得到来自第三页的缓存数据会触发微调器隐藏,并在订阅获得“正确”数据之前显示错误的数据集一/几秒钟。
我的问题是:有什么方法可以清除/控制特定查询/watchQuery 的缓存,以便我始终确定不在客户端显示缓存数据?
graphql - Apollo GraphQL:SSR 后延迟加载数据
我有以下代码:
在迁移到 Apollo 之前,我将 ALL_LOCATIONS_QUERY 作为同构获取客户端(基本上是 AJAX 请求)加载。但我正在寻找阿波罗的方式,我不确定我是否有它。我有几个问题。
- 使用
graphql(QUERY_NAME, { options })
,因为我完全分开加载 Home 数据和 Locations 数据,它们是否应该放置在高阶组件中的单独的多个graphql
函数中?withApollo(compose([...here])
- 目前为了从
fetchMore
函数中获取数据,我正在执行以下操作,但有些事情告诉我它应该在状态内完成,所以 Apollo 知道它可以进行缓存。对此有什么想法吗?我是否朝着正确的方向前进?
非常感谢您!
graphql - 如何在 graphql apollo-server 突变解析器中发出错误信号?
文档告诉我们解析器具有以下形式:
结果是null
或者undefined
如果“找不到对象”。
其他错误呢?例如,如果访问未获授权?
看来您不能直接“返回”错误,因为结果必须与架构匹配。
我尝试在解析器中抛出异常,这几乎是正确的:客户端收到 ApolloError,其中包含异常消息:太好了。但是阿波罗服务器发出堆栈跟踪,好像没有处理异常。这似乎不对。
因此,问题是:这应该怎么做?
apollo-server 堆栈跟踪,以防有帮助:
javascript - Apollo 中的自动 UI 更新问题:`updateQuery` 不能与 `subscribeToMore` 一起正常工作
我正在为我的聊天应用程序使用GraphQL 订阅,但我遇到了 UI 更新问题。
这是我正在使用的查询和突变:
然后,在导出时,我Chat
像这样包装我的组件:
我订阅了allMessagesQuery
in componentDidMount
:
通过聊天发送消息后,订阅成功触发,我看到两个日志语句也包含预期的数据。所以里面的内容messages
肯定是正确的updateQuery
!
但是,UI 不会自动更新,实际上,之前显示的所有消息都会消失。
我的render
方法如下所示:
中的日志记录语句render
显示最初this.props.allMessagesQuery
具有数组allMessages
,因此在初始加载后一切正常。
收到订阅后,就会allMessages
消失,this.props.allMessagesQuery
这就是为什么给一个空数组ChatMessages
而没有渲染任何内容的原因。
订阅触发前✅</p>
订阅触发后❌</p>
graphql - Graphql 使用 makeExecutableSchema 解析映射
我在尝试解析 GraphQL 类型中的字段时遇到问题。所以,在这里我试图find
解决patientQuery
但是当我做这样的查询时
我总是得到空
那么解析patientQuery
类型内字段的正确方法是什么?
javascript - GraphQL 突变后的 updateQueries 无法与 Apollo 客户端一起使用
在我的应用程序中发送createMessage
突变后,我想ApolloStore
使用updateQueries
.
我的设置如下所示:
我createMessageMutation
在我的代码中这样调用:
有了这个设置,我希望我在值中指定的函数updateQueries
被执行,但是,这似乎没有发生(日志语句从不打印)。
作为参考,这是allConversation
查询中的ApolloStore
样子:
此外,这在我的 JS 代码中是如何定义的:
有没有人发现我做错了什么?
reactjs - Apollo GraphQL 查询返回后如何更新 Redux 存储
我正在使用graphql
react apollo 提供的 HOC 获取数据列表。例如:
我在受控单选按钮组中显示列表,默认情况下我需要选择其中一项。所选项目的id
保存在 Redux 存储中。
selectedItem
那么,问题是在查询成功返回后如何更新 Redux 存储(即设置)?
我想到的一些选择:
选项1
APOLLO_QUERY_RESULT
我应该在我的 Redux reducer 中监听操作吗?但这有点尴尬,因为这样我就需要听两者APOLLO_QUERY_RESULT
,APOLLO_QUERY_RESULT_CLIENT
如果查询之前已经运行过。而且operationName
道具只出现在APOLLO_QUERY_RESULT
动作中而不是APOLLO_QUERY_RESULT_CLIENT
动作中。所以我需要剖析每一个APOLLO_QUERY_RESULT_CLIENT
动作,才能知道它是从哪里来的。难道没有一种简单直接的方法来识别查询结果操作吗?
选项 2
我是否应该分派一个单独的动作SELECT_LIST_ITEM
,componentWillReceiveProps
例如(使用recompose):
选项 3
我是否应该通过注入 Apollo 客户端直接使用它,withApollo
然后使用client.query(...).then(result => { /* some logic */ selectItem(...)})
. 但是我会失去 react-apollo 集成的所有好处,所以不是一个真正的选择。
选项 4
查询返回后我是否应该完全不更新 Redux 存储?因为我也可以只实现一个选择器,selectedItem
如果它已设置,则返回它,如果没有,它会尝试通过浏览apollo
商店的一部分来派生它。
我的选择都不能让我满意。那么,我该怎么做呢?
apollo - 使用 Apollo (graphql) 批量递归查询
Facebook 炫耀在打开 graphql 时提交递归查询的能力,我正在努力寻找能够让您高效(联网)且轻松地执行此操作的文档。
准确地说,我可能希望查询子项(名称)> 名称子项(curName)[名称子项...],直到我用尽整个树而不在查询本身中输入任意数量的分支(如果可能)。