【发布时间】:2022-05-09 07:55:47
【问题描述】:
我最近开始学习 GraphQL,发现了一个我无法解释的情况。
举个例子
var {ApolloServer, gql} = require("apollo-server")
const typeDefs = gql`
type Query {
test: type1!
}
type type1 {
value: String!
}
`;
const resolvers = {
Query: {
test: (parent) => {
console.log(parent)
return "How does my query still work?!"
}
},
type1: {
value: (parent) => {
console.log(parent)
return "hello!"
}
}
}
const server = new ApolloServer({ typeDefs, resolvers })
server.listen(8080).then(({url}) => console.log(`server stated on ${url}`))
在正常情况下,GraphQL 会从外向内解析查询,并将使用它对给定字段的最具体的解析器,直到所有字段都被解析。
我对这个示例感到困惑的是,我从顶级解析器返回的字符串到底发生了什么。
这个查询
query {
test {
value
}
}
产生结果
{
"data": {
"test": {
"value": "hello!"
}
}
}
鉴于上面的示例,我完全希望我的 GraphQL 服务器会抛出错误,因为我的顶级解析器返回 String 而不是架构要求的 type1。
我的问题基本上是,我的服务器对解析器返回的值做了什么?显然,如果我在我的顶级解析器中返回 String,则必须发生相当大的事情才能将其转换为查询响应的 Object。
【问题讨论】:
-
@xadm 我明天试试。在该评论告诉我之后,我尝试记录 args 并且几乎没有说明情况。 args 将是一个空对象,因为没有参数被传递到查询中。除非我完全误解了 GraphQL 的实现方式,否则您需要更具体一点。
-
stackoverflow.com/q/66114816/6124657 ... 搜索一些关于“如何工作”的教程
-
@xadm 恕我直言,这条评论非常无益。如果您的目标是真正帮助我理解这个概念甚至回答我的问题,那么您应该花两秒钟以上的时间来实际创建答案。我在这里运行的代码非常简单,您可以自己运行它,甚至对其进行必要的更改以说明您要向我展示的任何内容。告诉正在询问有关特定工具的特定问题的人“只看一些教程”是您可能提供的最无用的建议。
-
@xadm 如果我觉得单独看教程可以真正回答我的问题,那么我会很乐意这样做,但是已经观看了数小时的 GraphQL 教程,我现在处于一个'我非常有信心它不会导致这个特定问题的答案。如果您无法提供实际答案,甚至无法在评论中解释您的意思,那么您发表评论毫无意义。
-
记录了什么?服务器期望什么?它是如何相关的?登录
info
标签: javascript graphql apollo-server