sumbit突变后,Apollo数据对象为空

时间:2019-09-06 07:41:13

标签: vue.js graphql apollo

我当前正在使用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>

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

解析器为您提供有关reqoust的一些信息:

第一个参数:父级

第二个参数:args =>包含请求有效载荷

3d参数:上下文

第4个参数:信息

突变数据存在于您不使用的第二个参数中(参数)。 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
  }
}

希望有道理。

答案 2 :(得分:0)

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

不确定this。$ apollo.mutate来自何处,但该mutate通常会返回一个promise。

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