首页 > 解决方案 > Nuxt-Apollo-Graphql - 具有关系的嵌套突变

问题描述

我正在寻找 3 天如何实现嵌套突变。

我正在使用 Nuxt JS、带有 Graphql 和 graphql-tag 模块的 Strapi 以及 MongoDb

我有两个集合:Heaturls 和 heatmap,与 Heatmap 有关系并且属于一个 Heaturl

我使用 store 来查询和变异。

我想要的是将新条目添加到我的 Heatuls 集合中,然后在我的 Heatmap 集合中使用我之前创建的 heaturl 条目的 ID 创建新条目。

这是我的函数 Store.js

async saveHeaturl({
    commit,
    dispatch
  }, datas) {
    console.log(this.app)
    return await this.app.apolloProvider.clients.defaultClient.mutate({
      mutation: CREATE_HEAT_MUTATION,
      variables: {
        ...datas,
        site: this.$auth.$state.user.site,
      }
    }).then((res) => {
      commit('addHeatItem', res.data.createHeaturl.heaturl)
      console.log('res ???', res.data)
      dispatch("saveHeatmap", res.data.createHeaturl.heaturl)
    })
  },
async saveHeatmap({
    commit,
    
  }, datas) {
    console.log("on a bien disptach le bordel", datas)

    return await this.app.apolloProvider.clients.defaultClient.mutate({
      mutation: CREATE_HEATMAP_MUTATION,
      variables: {
        heatdatas:JSON.stringify({}),
        heaturl_id: datas._id
      }
    }).then(res => {
      console.log("res ======", res)
    })
  },

saveHeatmap 在 saveHeaturl 完成后调度。

这是我的查询结构

export const CREATE_HEATMAP_MUTATION = gql `
  mutation createHeatmap($heatdatas: JSON!, $heaturl_id: ID!) {
  createHeatmap(
    input: { data: { heatdatas: $heatdatas, heaturl_id: $heaturl_id } }
  ) {
    heatmap {
      _id
      heaturl_id {
        _id       
      }
    }
  }
}
`

export const CREATE_HEAT_MUTATION = gql `
  mutation createHeaturl(
  $status: Boolean!
  $recordingflow: Int!
  $urlname: String!
  $pagecasting: Boolean!
  $pageurl: String!
  $datamatching: Int!
  $shortdesc: String!
  $pagesnapshot: JSON!
  $site:ID!
) {
  createHeaturl(
    input: {
      data: {
        urlname: $urlname
        recordingflow: $recordingflow
        status: $status
        pagecasting: $pagecasting
        pageurl: $pageurl
        datamatching: $datamatching
        shortdesc: $shortdesc
        pagesnapshot: $pagesnapshot
        site:$site
      }
    }
  ) {
    heaturl {
      _id
      createdAt
      status
      urlname
      pageurl
      shortdesc

    }
  }
}
`

当我使用我的表单保存我的 heaturl 时,一切正常(它保存在我的数据库中)并且我得到了最后创建的 id。当我发送第二个动作时,我总是会收到错误消息。

{,…}
data: {createHeatmap: null}
createHeatmap: null
errors: [{message: "Cannot convert object to primitive value", locations: [{line: 2, column: 3}],…}]
0: {message: "Cannot convert object to primitive value", locations: [{line: 2, column: 3}],…}
extensions: {code: "INTERNAL_SERVER_ERROR", exception: {,…}}
locations: [{line: 2, column: 3}]
message: "Cannot convert object to primitive value"
path: ["createHeatmap"]

我不知道如何解决这个问题。我尝试更改类型格式但没有成功。

我不明白为什么我有这样的错误。我与其他收藏有其他关系,并且工作正常。

谁能给我一个线索或任何教程来解决我的问题。

非常感谢大家

法比安

标签: graphqlnuxt.jsvue-apollographql-tag

解决方案


推荐阅读