提交突变后 Apollo 数据对象为空
Posted
技术标签:
【中文标题】提交突变后 Apollo 数据对象为空【英文标题】:Apollo data object is empty after sumbit a mutation 【发布时间】:2020-01-09 01:53:10 【问题描述】:我目前正在使用 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>
【问题讨论】:
【参考方案1】:发生错误时,数据返回空。您需要寻找完整的回复。那里可能存在错误。
不确定 this.$apollo.mutate 来自哪里,但 mutate 通常会返回一个承诺。
使用它们的一个好方法是使用钩子:https://www.apollographql.com/docs/react/essentials/mutations/
【讨论】:
【参考方案2】:解析器为您提供有关请求的一些信息:
第一个参数:父母
第二个参数:args => 包含请求负载
3d 参数:上下文
第四个参数:信息
突变数据存在于您不使用的第二个参数(args)中。
args 将包含一个对象。在您的情况下,user
带有来自客户端请求的值。 ($变量)。
upsertUserKyrios: async (_, args, server ) =>
在客户端:
当您提交表单时,在可验证对象 (UserKyriosInput) 中发送所有必要的信息
variables:
user:
firstname: this.user.firstName
lastname: this.user.lastName
email: this.user.email
password: this.user.password
或
variables:
user:
...this.user
希望有意义。
【讨论】:
【参考方案3】:您的解析器似乎缺少信息。解析器中的第二个参数似乎没有处理来自字段的任何传入数据。另外,一旦出现这些参数,可能我对 Mongo 的了解还不够,但是您不应该将要插入的数据作为对象发送到 insertOne 函数中吗?
我们还应该看看你的 gql 定义是什么样的。
【讨论】:
我添加了这样的用户变量,但它不起作用 upsertUserKyrios: async (_, user , server ) => server.plugins.mongodb.UserKyrios.insertOne(user), 您肯定需要传递某种数据作为第二个参数。它应该像你在那里一样。在解析器中使用 console.log(user) 来验证数据是否到达那里并不是一个坏主意。如果不是,您可能错误地定义了突变。如果您还可以更新您的原始帖子以包含import UPSERT_USER_KYRIOS from '../../../../graphql/KyriosMutations';
实际导入的内容会很棒。
我认为问题在于我的突变声明,因为当我删除解析器时,我得到了相同的东西......
这就是我们的意思。在您的问题中,没有足够的信息来确定去哪里。需要对数据流向的位置进行更多调试。以上是关于提交突变后 Apollo 数据对象为空的主要内容,如果未能解决你的问题,请参考以下文章