graphql:必须提供来源。收到:种类:“文档,定义......

Posted

技术标签:

【中文标题】graphql:必须提供来源。收到:种类:“文档,定义......【英文标题】:graphql: Must provide Source. Received: kind: "Document, definition ...graphql:必须提供来源。收到:种类:“文档,定义...... 【发布时间】:2019-10-30 13:34:02 【问题描述】:

我真的是 Graphql 的新手(实际上就在昨天)。我正在“玩耍”并尝试生态系统的各种工具(apollo-server、graphql.js ...等)。

为了试验,我试图从 nodejs 中调用查询(而不是从浏览器中的客户端,例如反应应用程序)

首先,这是我的简单架构以及解析器:

export const mySchema = gql`
   type User 
      id: ID!
      name:  
      surname: String
   

   # root query has been defined in another file
   extend type Query 
      users: [User]
      test: [User]
   
` 
export const myResolvers = 
   users: () => [ __array_of_users__ ],
   test: () => /* this is where I would like to re-invoke the 'users query'

使用makeExecutableSchema 函数,我用我的类型和解析器创建了一个schema 对象,并将这个模式导出到阿波罗服务器应用程序中。到目前为止一切正常。

现在在*** suggested solution 之后,我创建了一个帮助函数,它应该允许我调用在我的架构中定义的查询,如下所示:

import  graphql  from "graphql";
import  schema  from "./my-schema";

export const execute = str => 
  return graphql(schema, str );
;

有了这个辅助函数,我的解析器变成了:

import  gql  from "apollo-server-express";
import  execute  from '__path_to_helper_function__';

export const myResolvers = 
  users: () => [ __array_of_users__ ],
  test:  () => execute( gql`
     query users 
           name
          
  `)

但是在操场上,当我尝试查询时:

   
      test 
        name
      
   

我收到以下错误:

我什至不知道我想要做什么(从节点内调用查询)是否可以完成。任何建议将不胜感激。

感谢

【问题讨论】:

【参考方案1】:

graphql-tag 接受一个字符串并将其解析为一个DocumentNode 对象。这实际上与将字符串传递给parse 函数相同。 graphql 模块导出的某些函数,如execute,期望在DocumentNode 对象中传递——graphql 函数没有。从签名中可以看出,它应该只传递一个纯字符串作为请求:

graphql(
  schema: GraphQLSchema,
  requestString: string,
  rootValue?: ?any,
  contextValue?: ?any,
  variableValues?: ?[key: string]: any,
  operationName?: ?string
): Promise<GraphQLResult>

所以,只需删除 gql 标记即可。您可以看到一个(不完整的)API 参考 here。

【讨论】:

感谢您的回答。我按照建议删除了“gql”,现在传递了一个字符串:“查询用户名称”。我现在收到错误消息:“无法在“查询”类型上查询字段“名称”。”这个错误意味着什么? 您正在请求根查询类型上的字段name,该字段不存在。大概你的意思是query users name 。前者仍然有效,因为 users 只是被视为操作的名称。 我尝试了你的建议query users name ,不幸的是我遇到了同样的错误...... @TheSoul 您是否像以前一样收到 same 错误? Cannot query field "name" on type "Query" 无论哪种方式,这可能应该是一个包含所有相关代码的单独问题。您看到的错误与您的原始问题无关。

以上是关于graphql:必须提供来源。收到:种类:“文档,定义......的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到错误“必须提供查询字符串”。快递-graphql?

GraphQL:错误:必须提供文档

Apollo GraphQL 错误:必须提供查询根类型

GraphQL 文件上传纯 JS “必须提供查询字符串”。

Spring Boot + GraphQL 才是 API 的未来!

GraphQL 文档资源管理器未加载我的架构