我是GraphQl的新手。我正在使用Apollo的Vue.js项目中的Graph.cool。
- 我现在正在使用内存中缓存。
- 我以前有一个简单的" allposts"查询。
- 创建新的后,我使用了update((钩和readquery(( writequery((
但是,我希望登录用户只能看到他们的帖子。因此,我用过滤器修改了查询。
query userStreams ($ownerId: ID!) {
allStreams(filter: {
owner: {
id: $ownerId
}
}) {
id
name
url
progress
duration
watched
owner {
id
}
}
}
我的想法是,我只需要传递用户ID变量即可。但是这不起作用。我总是得到
Error: Can't find field allStreams({"filter":{"owner":{}}}) on object (ROOT_QUERY) undefined.
this.$apollo.mutate({
mutation: CREATE_STREAM,
variables: {
name,
url,
ownerId
},
update: (store, { data: { createStream } }) => {
const data = store.readQuery({
query: USERSTREAMS,
variables: {
id: ownerId
}
})
data.allStreams.push(createStream)
store.writeQuery({
query: USER_STREAMS,
variables: {
id: ownerId
},
data
})
}
})
使用readquery或writeQuery时,应使用相同的变量名称。所以替换
variables: { id: ownerId }
variables: { ownerId }
另外,您获得例外的原因是,如果数据不在商店中,则会引发异常。这是在您第一次使用writeQuery之前发生的(或与其他查询获取数据(。
您可以在调用此突变之前为商店写一些默认值。
您还可以使用返回null而不是抛出异常的读取段。但这将需要对您的代码进行更多更改。