如何在 graphql 上正确创建 Id 字段以符合中继标准?
Posted
技术标签:
【中文标题】如何在 graphql 上正确创建 Id 字段以符合中继标准?【英文标题】:How to properly create the Id field on a graphql to be relay compliant? 【发布时间】:2017-08-18 13:02:34 【问题描述】:我正在关注relay+graphql 教程,但我对这段代码感到困惑:
const GraphQLTodo = new GraphQLObjectType(
name: 'Todo',
fields:
id: globalIdField('Todo'),
text:
type: GraphQLString,
resolve: (obj) => obj.text,
,
complete:
type: GraphQLBoolean,
resolve: (obj) => obj.complete,
,
,
interfaces: [nodeInterface],
);
关于文本和完整字段的解析,obj来自哪里?是查询中的 obj 参数吗?还有,我如何从查询中解析 id ?难道我不必解决它?例如,这是 id 字段代码:
id:
id: globalIdField('Todo'),
resolve: (obj) => obj.id,
上面的代码会起作用吗?它不是多余的吗?如何正确创建 Id 字段以符合中继标准?
【问题讨论】:
【参考方案1】:obj
是记录本身,通常是您从持久存储中获得的任何格式。在本例中,它是一个Todo
对象,至少具有两个属性:text
和complete
。这使得解析函数变得微不足道。存在解析函数,因此您可以执行更复杂的操作,例如:
fullName:
type: GraphQLString,
resolve: (obj) => obj.firstName + ' ' + obj.surname,
对于符合 Relay 的 ID,我认为您无需执行任何操作。 globalIdField
帮你搞定。
【讨论】:
持久存储是什么意思?数据库? 是的,数据库(SQL 或其他)通常是存储数据的地方。在一些 GraphQL 教程中,我看到它被简化为没有持久性的内存数据结构。不过,这通常只是对教程的简化。 感谢您的时间和解释,帮助很大。以上是关于如何在 graphql 上正确创建 Id 字段以符合中继标准?的主要内容,如果未能解决你的问题,请参考以下文章
对 Type-graphql 和 Typeorm 实体中的外键字段使用 ID 标量类型在语义上是不是正确?