我认为问题是我的schema.js文件中的字段称为“ id”以外的名称,因为该字段在数据库中称为其他名称。
var classroomType = new GraphQLObjectType({
name: 'Classroom',
description: 'A classroom in a school',
fields: () => ({
clid: globalIdField('Classroom'),
course: {
type: GraphQLString,
description: 'The course assigned to this classroom.'
},
enrollments: {
type: enrollmentConnection,
description: 'The students in a classroom',
args: connectionArgs,
resolve: (classroom, args) => connectionFromArray(classroom.enrollments.map(getEnrollment), args)
}
}),
interfaces: [nodeInterface],
});
gloablIdField是否必须称为
id
?那看起来很奇怪。如果是这样,我该如何将其映射到数据库中未称为id
的id字段? 最佳答案
如果需要将全局id字段设置为“ clid”,则可以在Node接口中将id的名称更改为clid,也可以保留其id并将别名应用到击中数据库的resolver方法中。
选项1如下所示:
interface MyNode {
clid: ID!
}
type Classroom implements MyNode {
clid: ID!
...
}
选项2
graphql-relay公开的'globalIdField'函数接受idFetcher作为第二个参数。您可以将其更改为:
id: globalIdField('Classroom', (obj, context, info) => obj.clid)
然后,您还需要别名化id字段,以便也可以加入您的突变解析器。
关于javascript - relayjs和graphql错误:错误:“节点”期望字段“id”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41175180/