问题标签 [apollo-link]

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 回答
137 浏览

graphql - Apollo Link 数据突变

我正在尝试对整个应用程序的 apollo-link 处理程序中的数据进行变异:我想删除所有边缘/节点,以简化应用程序中数据的处理。

当我尝试更改数据并返回数据的修改副本时,我的 vue 组件中的 apollo 处理程序会得到一个空的数据对象={}。我也尝试就地改变数据,但这也不起作用:vue 组件获取原始的不变data

这种行为的解释是什么?以及如何实现 Apollo 链接以能够改变数据?这可能吗?

0 投票
2 回答
624 浏览

apollo - 如何在 apollo 链接中返回错误响应?

我在模式拼接中使用 apollo 链接作为访问控制层。如果用户无权访问特定操作,我不太确定如何使链接返回错误响应。我知道这样的包graphql-shieldgraphql-middleware但我很好奇天气可以使用 apollo 链接实现基本的访问控制。

这是我的链接的样子:

取决于用户middlewareLink角色的checkPermissions返回truefalse

hasAccess如果是我该怎么办false。我想我不需要转发操作,因为此时很明显用户无权访问它

更新

我想我需要做的是扩展ApolloLink类,但到目前为止我还没有设法返回错误

0 投票
0 回答
149 浏览

graphql - Apollo Link State 中的默认值的目的是什么?

为什么要这样做:

在此:

我可以看到后一种方法的优点是:

  • 它更类似于在服务器上编写解析器
  • 它通过简单地返回一个承诺来支持异步
  • 它充当默认值,因为根据我目前的理解,解析器仅在缓存未命中时调用。

我看不出使用以前的defaultsAPI 有什么好处,但我敢肯定有一个原因,否则它就不会存在?

0 投票
1 回答
796 浏览

apollo - apollo-client - 我可以在 apollo-client 实例化后动态调整 apolloLinks 吗?

如何在实例化的 apollo-client 实例中在运行时更新令牌?

apollo 实例有一个 link 属性,它本身就是一个 ApolloLink 实例,它有 concat 方法。

但是调用那个 concat 会返回一个新的 ApolloLink 实例。有没有办法用这个新的 ApolloLink 更新客户端实例?

0 投票
1 回答
3031 浏览

reactjs - 使用 Apollo 和 React 捕获身份验证失败后如何正确重定向

我正在编写一个反应应用程序,该应用程序使用apollo-client并且正在apollo-link-error用于全局捕获身份验证错误。我正在使用createBrowserHistory浏览器历史记录操作和redux管理我的应用程序状态。

在身份验证错误时,我想将用户重定向到/login页面。但是,使用history.push('/login')forceRefresh:false 会更改 URL,但实际上并没有在我的应用程序中导航。

如果我使用forceRefresh:true它可以工作,但应用程序会完全重新启动,我想避免这种情况。

`

我认为问题在于我没有使用redux-router导航方法(因此即使 url 发生变化,应用程序也保持不变)

问:当我不在组件内时,如何获取redux history类似于 using 的对象?withRouter()处理这种情况的正确方法是什么?

0 投票
1 回答
247 浏览

react-native - 中继订阅 onNext 未在 react-native 上触发

我是订阅设置,但 onNext 没有被触发我不知道为什么,因为这是我第一次实现订阅,文档对这个问题没有太大帮助。

以下是代码实现:

这是我的订阅网络

订阅在它执行的组件上的 componentDidMount 方法中调用,但是当新信息添加到订阅正在侦听的内容时,订阅中的 onNext 方法永远不会触发。

0 投票
0 回答
477 浏览

reactjs - 处理自定义 apollo graphql 后端的 firebase 初始化延迟和 id 令牌

目前,当我使用 firebase 对用户进行身份验证时,我会将他们的身份验证令牌存储起来localStorage以供以后连接到我的后端,如下所示:

我的问题是,一旦令牌过期,我就无法刷新令牌。所以我尝试使用以下方法为 apollo 设置授权令牌:

这在用户第一次进行身份验证时有效,但是一旦用户刷新页面,当我的 graphql 查询发送到我的后端时,firebase 就不再初始化,因此令牌不会随它一起发送。有没有办法我可以异步等待firebase.auth().currentUser所以这会起作用?还是我应该完全采取另一种方法?据我所知(100% 肯定)currentUser.getIdToken仅在当前令牌不再有效时才进行网络调用。我认为这是可以接受的,因为在令牌无效的情况下,后端无论如何都无法响应,所以我需要等待令牌刷新才能继续。

我想到的其他一些想法:

  • 继续用于localStorage存储身份验证令牌,authAfterware如果我的后端发送回 401 响应并重试请求,请刷新它。
  • 设置获取授权令牌的延迟(不可取)
  • 还有其他想法吗?

谢谢!

0 投票
0 回答
153 浏览

graphql - 如果数据不为空,作为网关运行的 Apollo 服务器将隐藏远程错误

我正在运行一个apollo-server-express作为网关应用程序。makeRemoteExecutableSchema使用和设置一些底层 GraphQL 应用程序apollo-link-http

通常每个电话都可以正常工作。如果错误是响应的一部分并且数据为空,它也可以工作。但是如果数据只包含数据并且错误包含错误。数据将通过但错误为空

示例 A“工作示例”:

询问

查询响应

示例 B“隐藏的错误”:

询问

来自远程服务的响应 (httpLink)

response.errors并且graphQLErrorsinonError方法也包含错误

回复

根据graphql规范,如果错误对象是响应的一部分,我会期望它不会被隐藏

https://graphql.github.io/graphql-spec/June2018/#sec-Errors

如果响应中的数据条目存在(包括它是否为 null 值),则响应中的错误条目可能包含执行期间发生的任何错误。如果在执行过程中发生错误,它应该包含这些错误。

0 投票
0 回答
88 浏览

graphql - 特定突变客户分离

我知道可以apollo-link-ws用来处理客户端的订阅。我还创建了一个客户端,它使用标准http运行QuerisMutations,并WebSocket使用subscriptions. 但我也需要Pub通过 websocket (发出)一些数据到服务器。因此,一种方法仅apollo-link-ws用于所有操作(Query、Mutation)。但是是否可以决定哪个查询使用 Websocket 哪个使用标准 http 客户端?

我将客户传递给ApolloProvider.

0 投票
1 回答
979 浏览

apollo - 重试成功时的 Apollo-link @client 突变

当网络错误导致重试时,我正在我的 React 应用程序中呈现通知。如果/重新建立连接(重试成功),我希望清除任何此类通知

当重试循环开始和超时时,我已经使用apollo-link-retry并使用了自定义attempts回调来改变缓存。这可行,但是当重试成功时通知会留在屏幕上,因为在成功重试时不会调用回调,所以我无法从缓存中清除通知。

我已经尝试使用apollo-link-error类似的问题来实现类似的逻辑。只有在发生错误并且成功重试不是错误时才会调用该链接。

这是我的apollo-link-retry“几乎”有效的配置:

也许我需要实现一个自定义链接来完成这个?我希望找到一种方法来利用良好的重试逻辑,apollo-link-retry并随着逻辑的进展另外发出一些状态来缓存。