提交突变后 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/
我目前正在使用 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/