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?