我有啥理由在 GraphQL 结果中取回查询名称?
Posted
技术标签:
【中文标题】我有啥理由在 GraphQL 结果中取回查询名称?【英文标题】:Any reason I am getting back the query name in the GraphQL results?我有什么理由在 GraphQL 结果中取回查询名称? 【发布时间】:2017-12-27 13:30:26 【问题描述】:将makeExecutableSchema
与以下查询定义一起使用:
# Interface for simple presence in front-end.
type AccountType
email: Email!
firstName: String!
lastName: String!
# The Root Query
type Query
# Get's the account per ID or with an authToken.
getAccount(
email: Email
) : AccountType!
schema
query: Query
还有以下解析器:
export default
Query:
async getAccount(_, email, authToken )
/**
* Authentication
*/
//const user = security.requireAuth(authToken)
/**
* Resolution
*/
const account = await accounts.find(email)
if (account.length !== 1)
throw new GraphQLError('No account was found with the given email.', GraphQLError.codes.GRAPHQL_NOT_FOUND)
return account
当我查询时:
query
getAccount(email: "test@testing.com")
firstName
lastName
我在 GraphiQL 中得到以下结果:
"data":
"getAccount":
"firstName": "John",
"lastName": "Doe"
那么,有什么理由让我在结果中返回这个“getAccount”?
【问题讨论】:
【参考方案1】:因为getAccount
不是查询名称。它只是根查询类型Query
上的常规字段。
在与查询完全相同的形状上获得结果是 GraphQL 的核心设计原则之一:
来自http://graphql.org/ 站点的屏幕截图
GraphQL 中的查询名称在 query
关键字之后:
query myQueryName
getAccount(email: "test@testing.com")
firstName
lastName
【讨论】:
好的,这是有道理的,但提出了另一个问题,即使用makeExecutableSchema
创建多个查询名称。现在我只是在后端污染根Query
。你会怎么做?或者您是否应该将查询定义为(在本例中为 AccountType)类型的一部分?
事实上。我只是尝试通过extend
将查询拉入另一个文件中的类型定义(我用于扩展Query
)来对此进行测试,但得到了"Cannot query field \"getAccount\" on type \"Query\"." when trying
query Account getAccount(email: "test@testing. com") firstName lastName `以上是关于我有啥理由在 GraphQL 结果中取回查询名称?的主要内容,如果未能解决你的问题,请参考以下文章
在创建模型的 GraphQL/Relay 突变中,有没有办法取回模型 ID?