我有啥理由在 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?

GraphQL 查询仅显示原始结果

GraphQL 中的静态值

400 对 GraphQL 端点的错误请求(我的测试查询有啥问题?)

制作不区分大小写的 GraphQL 查询

如何在 Graphql 中连接嵌套查询?