我是使用GraphQL的新手。非常习惯于使用Redux,但是由于有新的要求,我已经开始在后端使用GraphQL,并且还在本地状态管理中使用apollo客户端。我正在尝试实现一个“ isLoggedIn”布尔值,以确定用户是否登录。
根据我的阅读,这是您的操作方式:
import withApollo from 'next-with-apollo';
import ApolloClient, { InMemoryCache, gql } from 'apollo-boost';
import {typeDefs, resolvers} from '../resolvers/index';
const cache = new InMemoryCache();
cache.writeData({
data: {
User: {
isLoggedIn: false,
email: "empty"
}
}
})
const IS_LOGGED_IN = gql`
query IsLoggedIn{
User{
isLoggedIn
}
}`
`
export default withApollo(
({ ctx, headers, initialState }) =>
new ApolloClient({
uri: "http://localhost:4000/auth/authorize",
cache: cache,
headers: {
authorization: ''},
typeDefs,
resolvers: {
User : {
isLoggedIn: (_, _args, {cache}) => {
const {isLoggedIn} = cache.readQuery({query: IS_LOGGED_IN});
return isLoggedIn;
}
}
}
}));
我在状态初始化之前创建了一个缓存对象,因此我可以写入最初想要的值(loggedin = false)。
然后,我写了一个查询IS_LOGGED_IN来查询状态。
然后,我初始化Apollo客户端状态,并为查询添加解析器。
我感觉自己犯了一个严重错误,但不确定是什么。我当前正在查看的错误是:
Missing field __typename in {
"isLoggedIn": false,
"email": "empty"
}