2017-09-21 9 views
2

OS : 윈도우 10 프로
브라우저 : 오페라 47.0.2631.71 (PGO)
아폴로 클라이언트 : 1.9.2
구독-전송-WS : 0.6.0
VUE : 2.4.2
VUE - 아폴로 : 쿼리를 실행하려고 할 때아폴로 클라이언트 - 오류 : 찾을 수 없습니다 필드 allLinks ({}) 객체 (ROOT_QUERY)

그래서, 내가 위에서 언급 한 오류가 발생하고있어 2.1.0-rc.5 graphcool 끝점과 함께. 이 문제는 새로 생성 된 링크 항목을 up-vote하려고 할 때만 발생합니다. 여기서 문제는 무엇입니까?

전체 오류는 다음과 같습니다

"allLinks({\"first\":5,\"skip\":0,\"orderBy\":\"createdAt_DESC\"})": [ 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7ui2wn78joh0118s471fvgs", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7ue9p2pyk9e0118w9dc3eav", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7uaj5vwsa5b0126inei4jz0", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7toqpwstxmp0168exm6lihp", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7too3wgteq20154ax1agats", 
 
     "generated": false 
 
    } 
 
    ], 
 
    "_allLinksMeta": { 
 
    "type": "id", 
 
    "id": "$ROOT_QUERY._allLinksMeta", 
 
    "generated": true 
 
    }, 
 
    "allLinks({\"first\":5,\"skip\":5,\"orderBy\":\"createdAt_DESC\"})": [ 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7toe2egt9j40115r74dzmzi", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7to769uslpc0163giiymaeq", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7tdamdkb2c401074qhjw2ig", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7qlm4qb8vd501967t9jkvix", 
 
     "generated": false 
 
    }, 
 
    { 
 
     "type": "id", 
 
     "id": "Link:cj7qawaic5wgz0133mzzqvmat", 
 
     "generated": false 
 
    } 
 
    ] 
 
}. 
 
    at readStoreResolver (readFromStore.js?f639:42) 
 
    at executeField (graphql.js?206d:74) 
 
    at eval (graphql.js?206d:31) 
 
    at Array.forEach (<anonymous>) 
 
    at executeSelectionSet (graphql.js?206d:26) 
 
    at graphql (graphql.js?206d:20) 
 
    at diffQueryAgainstStore (readFromStore.js?f639:75) 
 
    at readQueryFromStore (readFromStore.js?f639:18) 
 
    at TransactionDataProxy.readQuery (proxy.js?d9b2:114) 
 
    at VueComponent.updateStoreAfterVote (LinkItem.vue?42d3:51) 
 
tryFunctionOrLogError @ errorHandling.js?e4be:7 
 
data @ store.js?2706:115 
 
apolloReducer @ store.js?8997:42 
 
combination @ combineReducers.js?a3f5:120 
 
computeNextEntry @ VM314:2 
 
recomputeStates @ VM314:2 
 
(anonymous) @ VM314:2 
 
dispatch @ createStore.js?8c3f:165 
 
dispatch @ VM314:2 
 
(anonymous) @ ApolloClient.js?f973:237 
 
(anonymous) @ store.js?8997:16 
 
(anonymous) @ QueryManager.js?2cbe:142 
 
Promise resolved (async) 
 
(anonymous) @ QueryManager.js?2cbe:127 
 
QueryManager.mutate @ QueryManager.js?2cbe:124 
 
ApolloClient.mutate @ ApolloClient.js?f973:197 
 
mutate @ vue-apollo.esm.js?1632:3069 
 
voteForLink @ LinkItem.vue?42d3:38 
 
boundFn @ vue.runtime.esm.js?a427:180 
 
click @ LinkItem.vue?219f:18 
 
invoker @ vue.runtime.esm.js?a427:1817

검색어 :

export const ALL_LINKS_QUERY = gql` 
 
query AllLinksQuery($first: Int, $skip: Int, $orderBy: LinkOrderBy) { 
 
    allLinks(first: $first, skip: $skip, orderBy: $orderBy) { 
 
    id 
 
    createdAt 
 
    url 
 
    description 
 
    postedBy { 
 
     id 
 
     name 
 
    } 
 
    votes { 
 
     id 
 
     user { 
 
     id 
 
     } 
 
    } 
 
    } 
 
    _allLinksMeta { 
 
    count 
 
    } 
 
} 
 
`

코드 :

ALL_LINKS_QUERY 호출로 변수를 연결하여

 voteForLink() { 
 
     const userId = localStorage.getItem(GC_USER_ID) 
 
     const voterIds = this.link.votes.map(vote => vote.user.id) 
 
     if (voterIds.includes(userId)) { 
 
      alert(`User (${userId}) already voted for this link.`) 
 
      return 
 
     } 
 
     const linkId = this.link.id 
 
     this.$apollo.mutate({ 
 
      mutation: CREATE_VOTE_MUTATION, 
 
      variables: { 
 
      userId, 
 
      linkId 
 
      }, 
 
      update: (store, { data: { createVote } }) => { 
 
      this.updateStoreAfterVote(store, createVote, linkId) 
 
      } 
 
     }) 
 
     }, 
 
     updateStoreAfterVote (store, createVote, linkId) { 
 
     // 1 
 
     const data = store.readQuery({ 
 
      query: ALL_LINKS_QUERY 
 
     }) 
 

 
     // 2 
 
     const votedLink = data.allLinks.find(link => link.id === linkId) 
 
     votedLink.votes = createVote.link.votes 
 

 
     // 3 
 
     store.writeQuery({ query: ALL_LINKS_QUERY, data }) 
 
     }

답변

2

좋아, 그래서 문제가 해결되었다 :

 const data = store.readQuery({ 
 
      query: ALL_LINKS_QUERY, 
 
      variables: { 
 
      first: 5, 
 
      skip: 0, 
 
      orderBy: 'createdAt_DESC' 
 
      } 
 
     })

+0

야, 당신은 저를 저장! 이것을 실행하는 사람은'variables'를'writeQuery'에 전달해야한다는 것을 기억하십시오. – nachocab