我在 GraphQL 中获得突变工作时遇到了一些困难,其中模式中的类型包括嵌套类型。所以说我有一个预订的数据类型:
const BookingType = new GraphQLObjectType({
name: 'Booking',
fields: () => ({
id: { type: GraphQLInt },
Date: { type: GraphQLString },
Venue: { type: GraphQLString }
})
});
在模式文件中,我还有一个根突变,如下所示:
createBooking: {
type: BookingType,
args: {
Date: { type: new GraphQLNonNull(GraphQLString) },
Venue: { type: new GraphQLNonNull(GraphQLString) }
},
resolve(parentValue, args){
return axios.post('http://localhost:3000/booking', args)
.then(resp => resp.data);
}
}
我可以在 GraphiQL 中编写一个突变来为预订创建数据,没问题:
mutation {
createBooking(
Date: "2018-03-12",
Venue: "Some place",
) {
id
Date
Venue
}
}
到目前为止,一切都很好。现在,我需要在原始预订对象中添加一个嵌套类型,以记录分配给预订的工作人员。所以我为工作人员添加了类型(输入和输出类型)并将它们添加到 Booking 类型和突变:
// output type
const AssignedStaffType = new GraphQLObjectType({
name: 'AssignedStaff',
fields: () => ({
id: { type: GraphQLInt },
Name: { type: GraphQLString }
})
});
// input type
const AssignedStaffInputType = new GraphQLInputObjectType({
name: 'AssignedStaffInput',
fields: () => ({
id: { type: GraphQLInt },
Name: { type: GraphQLString }
})
});
预订类型变为:
const BookingType = new GraphQLObjectType({
name: 'Booking',
fields: () => ({
id: { type: GraphQLInt },
Date: { type: GraphQLString },
Venue: { type: GraphQLString },
Staff: { type: new GraphQLList(AssignedStaffType) }
})
});
根突变变为:
createBooking: {
type: BookingType,
args: {
Date: { type: new GraphQLNonNull(GraphQLString) },
Venue: { type: new GraphQLNonNull(GraphQLString) },
Staff: { type: new GraphQLList(AssignedStaffInputType) }
},
resolve(parentValue, args){
return axios.post('http://localhost:3000/booking', args)
.then(resp => resp.data);
}
}
我不知道现在如何在 GraphiQL 中制定突变,特别是使用什么作为 Staff 的值:
mutation {
createBooking(
Date: "2018-03-14",
Venue: "Some place",
Staff: // ??? <--- What goes here??
) {
id
Venue
Date
Staff
}
}
我尝试给它一个对象,或者一个与 AssignedStaffInputType 具有相同结构的对象数组,但我只是得到一个错误('expecting AssignedStaffInputType')。客户端(在本例中为 GraphiQL)对架构中定义的 AssignedStaffInputType 一无所知,所以我不明白 a)如何在客户端中使用此输入类型,或者 b)我将如何填充这样的键入所需的数据。
请帮忙!