我认为问题是我的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/

10-09 17:53
查看更多