提交突变后 Apollo 数据对象为空

Apollo data object is empty after sumbit a mutation

我目前正在使用 apollo 在我的项目上进行传输(添加用户),当响应时我的对象数据为空。你知道为什么吗?

这是我的架构类型

  type UserKyrios {
    _id: ObjectId!
    firstname: String!
    lastname: String!
    email: String!
    password: String!
    creationDate: Date
  }
`;

这是我的输入类型

  input UserKyriosInput {
    firstname: String!
    lastname: String!
    email: String!
    password: String!
  }
`;

定义类型突变

  type Mutation {
    upsertUserKyrios(user: UserKyriosInput!): UserKyrios
  }

我的查询突变

mutation UpsertUserKyrios($user: UserKyriosInput!) {
    upsertUserKyrios(user: $user) {
        ...userKyriosFields
        creationDate
    }
  }

我的输出

data: {upsertUserKyrios: null}
upsertUserKyrios: null

我的解析器

upsertUserKyrios: async (_, __, { server }) => server.plugins.mongodb.UserKyrios.insertOne(),

我的脚本组件

<script>
import { UPSERT_USER_KYRIOS } from '../../../../graphql/KyriosMutations';

export default {
  name: 'addUserModalComponent',
  props: {
    dialog: {
      type: Boolean,
      default: false,
    },
  },
  data: () => ({
    user: {
      firstname: '',
      lastname: '',
      email: '',
      password: '',
    },
  }),
  methods: {
    closeDialog() {
      this.$emit('closeModal');
    },
    async submitForm() {
      const userCreated = await this.$apollo.mutate({
        mutation: UPSERT_USER_KYRIOS,
        variables: {
          user: this.user,
        },
      });
      console.log(userCreated);
    },
  },
};
</script>

您的解析器似乎缺少信息。解析器中的第二个参数似乎没有处理来自字段的任何传入数据。另外,一旦这些参数进来,也许我对 Mongo 了解不够,但你不应该将要插入的数据作为对象发送到 insertOne 函数中吗?

我们还应该看看您的 gql 定义是什么样的。

Resolvers 为您提供有关请求的一些信息:

第一个参数:Parent

第二个参数:args => 包含请求负载

3d 参数:上下文

第四个参数:信息

突变数据存在于您不使用的第二个参数 (args) 中。 args 将包含一个对象。在您的情况下 user 具有来自客户端请求的值。 ($变量).

upsertUserKyrios: async (_, args, { server }) =>

在客户端:

当您提交表单时,请在 veriables 对象 (UserKyriosInput) 中发送所有必要的信息

variables: {
  user: {
    firstname: this.user.firstName
    lastname: this.user.lastName
    email: this.user.email
    password: this.user.password
  }
}

variables: {
  user: {
    ...this.user
  }
}

希望有道理。

发生错误时,数据returns为空。您需要寻找完整的回复。那里可能存在错误。

不确定 this.$apollo.mutate 的来源,但变异通常 returns 一个承诺。

使用它们的一个好方法是使用钩子:https://www.apollographql.com/docs/react/essentials/mutations/