relayjs 和 graphql 错误:错误:“节点”需要字段“id”

Posted

技术标签:

【中文标题】relayjs 和 graphql 错误:错误:“节点”需要字段“id”【英文标题】:relayjs and graphql error: Error: "Node" expects field "id" 【发布时间】:2017-05-01 16:57:06 【问题描述】:

我认为问题在于我的 schema.js 文件中的字段被称为“id”以外的其他名称,因为该字段在数据库中被称为其他名称。

var clas-s-roomType = new GraphQLObjectType(
  name: 'Clas-s-room',
  description: 'A clas-s-room in a school',
  fields: () => (
    clid: globalIdField('Clas-s-room'),
    course: 
      type: GraphQLString,
      description: 'The course assigned to this clas-s-room.'
    ,
    enrollments: 
      type: enrollmentConnection,
      description: 'The students in a clas-s-room',
      args: connectionArgs,
      resolve: (clas-s-room, args) => connectionFromArray(clas-s-room.enrollments.map(getEnrollment), args)
    
  ),
  interfaces: [nodeInterface],
);

是否必须将 gloablIdField 称为 id?那会显得很奇怪。如果是这样,我如何将其映射到数据库中的 id 字段而不是 id

【问题讨论】:

【参考方案1】:

如果您需要将全局 id 字段设置为“clid”,您可以在 Node 接口中将 id 的名称更改为 clid,或者您可以保留它的 id 并将别名应用于解析器方法中命中的字段你的数据库。

选项 1 如下所示:

interface MyNode 
  clid: ID!


type Clas-s-room implements MyNode 
    clid: ID!
    ...

选项 2

graphql-relay 公开的 'globalIdField' 函数接受 idFetcher 作为第二个参数。您可以将其更改为:

id: globalIdField('Clas-s-room', (obj, context, info) => obj.clid)

然后,您还需要为 id 字段加上别名,以在您的突变解析器中添加。

【讨论】:

以上是关于relayjs 和 graphql 错误:错误:“节点”需要字段“id”的主要内容,如果未能解决你的问题,请参考以下文章

如何让 RelayJS 理解来自 GraphQL 的响应是一个项目数组,而不仅仅是一个项目

带有整数查询参数的 RelayJS 不变违规

什么是适合 relayjs 的后端?

RelayJS:如何通过道具设置初始变量

如何以及何时为 graphql 生成 ID?

GraphQL 和表单验证错误