从缓存graphql apollo 2.0读取数据
Posted
技术标签:
【中文标题】从缓存graphql apollo 2.0读取数据【英文标题】:read data from cache graphql apollo 2.0 【发布时间】:2018-10-16 06:14:40 【问题描述】:我正在使用阿波罗 2.0。我首先对给定的用户名和密码进行authUser
graphql
调用服务器,生成jwt
令牌并返回令牌作为响应。我确实看到成功登录后,User
存储在cache
中作为id
键值。
我确实有Buy
按钮,我需要为给定的token
制作validateSSOSession
。对于validateSSOSession
,我需要从缓存中读取token
。
我经历了client.readQuery
,client.fragementQuery
,但两者都不适用于我的案例 bcz client.readQuery
期望之前已向服务器调用相同的查询,我应该有相同的变量。因为我没有username/password
,所以我不能打电话给client.readQuery
。同样,client.fragementQuery
期望 id
是强制性的。由于我没有id
,因此无法使用它。
暂时,我只是从cache
迭代data
并过滤User
,如下所示。
const data = client.cache.data.data;
const users = _.values(data).filter(obj=>(obj.__typename==='User' && obj.token));
const token = users[0].token;
// Make graphql call to validate sso
const data = await client.query(
query: GET_SSO_USER,
variables: token
);
const authenticated = data.getSingleSignOnUser.user.userId;
是否有其他简单的方法可以从缓存中查询User
以获得给定条件?
【问题讨论】:
【参考方案1】:我使用client.readQuery()
。请参阅有关 https://www.apollographql.com/docs/react/api/apollo-client.html#ApolloClient.readQuery
import gql from 'graphql-tag';
import withApollo from "react-apollo";
const MY_QUERY = gql`
query
user email
`;
const MyReactComp = (client) =>
const someQueryResult = client.readQuery( query: MY_QUERY );
return someQueryResult.user ? 'hello user' : 'oops';
export default withApollo(MyReactComp);
【讨论】:
嘿@proti,你的数据在缓存中是什么样的,以便MY_QUERY
成功?我无法读取数据***.com/questions/61208333/… 谢谢?
常规数据对象。以上是关于从缓存graphql apollo 2.0读取数据的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL/Apollo 客户端:如果查询是先前查询的子集,则从缓存中获取数据
从 apollo 缓存读取查询,查询尚不存在,但所有信息都已存储在缓存中
GraphQL 角度阿波罗客户端。从缓存中读取抛出错误,但对服务器的相同查询工作正常