我使用graphql编写了一个非常简单的模式,但是边缘中的所有ID都是相同的。
{
"data": {
"imageList": {
"id": "SW1hZ2VMaXN0Og==",
"images": {
"edges": [
{
"node": {
"id": "SW1hZ2U6",
"url": "1.jpg"
}
},
{
"node": {
"id": "SW1hZ2U6",
"url": "2.jpg"
}
},
{
"node": {
"id": "SW1hZ2U6",
"url": "3.jpg"
}
}
]
}
}
}
}
我在github上发布了具体细节,这里是link。
答案 0 :(得分:7)
因此,globalIdField希望您的对象具有名为“id”的字段。然后它将您传递给globalIdField的字符串添加一个':'和您的对象的id来创建其全局唯一ID。
如果你的对象没有一个名为'id'的字段,那么它就不会附加它,你的所有globalIdField都只是你传入的字符串和':'。所以它们不会是独一无二的,它们都是一样的。
您可以传递给globalIdField的第二个参数,它是一个获取对象并返回要使用的globalIdField的id的函数。所以假设你的对象的id字段实际上被称为'_id'(感谢Mongo!)。您可以这样调用globalIdField:
id: globalIdField('Image', image => image._id)
你去吧。继电器的唯一ID。
以下是graphql-relay-js中相关源代码的链接:https://github.com/graphql/graphql-relay-js/blob/master/src/node/node.js#L110
答案 1 :(得分:0)
将以下代码粘贴到浏览器控制台
中 atob('SW1hZ2U6')
你会发现id的值是“Image:”。
表示(new MyImages()).getAll()
提取的记录的所有id属性
是空的。
返回union id,或者我建议您将图像定义为GraphQLList
var ImageListType = new GraphQL.GraphQLObjectType({
name: 'ImageList',
description: 'A list of images',
fields: () => ({
id: Relay.globalIdField('ImageList'),
images: {
type: new GraphQLList(ImageType),
description: 'A collection of images',
args: Relay.connectionArgs,
resolve: (_, args) => Relay.connectionFromPromisedArray(
(new MyImages()).getAll(),
args
),
},
}),
interfaces: [nodeDefinition.nodeInterface],
});