我的情况是用户可以同时保存带有某些相关标签的联系人记录。为此,我有一个名为“createContact”的变异,负责该操作。此突变的模式如下所示:
const Mutation = new graphQL.GraphQLObjectType({
name: 'Mutation',
fields: {
createContact: {
type: Contact,
description: "Create Contact",
args: {
_id: {type: new graphQL.GraphQLNonNull(graphQL.GraphQLString)},
name: {type: new graphQL.GraphQLNonNull(graphQL.GraphQLString)},
tags: {type: new graphQL.GraphQLList(TagInput)}
},
resolve: function(source, args, context) {
// There is usually some DB code here to save data
return args;
}
}
}
});
我在之前的实现中遇到了一些问题,但没有为我的查询ObjectType创建一个InputType模拟标签,所以我为标签创建了以下InputType:
const TagInput = new graphQL.GraphQLInputObjectType({
name: 'TagInput',
description: 'Input type variation for the tag record for use in mutations',
fields: () => ({
name: {
type: graphQL.GraphQLString
}
})
});
我使用以下查询测试我的设置:
{
"query": "mutation createNewContact {
contact: createContact (
_id: "contactID1",
name: "John Smith",
tags: [
{ name: "friend" },
{ name: "co-worker"}
]
)
{
_id,
name,
tags {
name
}
}
}
}
查询似乎工作正常,因为没有抛出的错误,请求中的所有数据都会进入解析器,但由于某些原因我还没弄清楚,它永远不会返回标记数据响应。我收到的回复是:
{
"data": {
"contact": {
"_id": "contactID1",
"name": "John Smith",
"tags": []
}
}
}
当我在没有任何数据库操作的情况下直接返回args或者在其中执行数据库操作时,都会发生这种情况。我一直试图解决这个问题一段时间,但不知道为什么响应中没有返回任何标签。如果有人有任何想法,我很乐意听到他们。谢谢!
编辑:
这是我的联系人的对象类型:
联系人:
const Contact = new graphQL.GraphQLObjectType({
name: 'Contact',
description: 'Contact record',
fields: () => ({
_id: {
type: graphQL.GraphQLID
},
name: {
type: graphQL.GraphQLString
},
tags: {
type: new graphQL.GraphQLList(Tag),
resolve: function(src, args, context) {
return TagModel.findByContactId(src._id)
.then(tags => {
return Promise.map(tags, (tag) => {
return TagModel.findById(tag.tag_id);
});
});
}
}
})
});