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