gpt4 book ai didi

javascript - 使用 graphql-yoga 的子字段上的 Graphql 错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:19:30 27 4
gpt4 key购买 nike

我正在尝试通过另一个 graphql API 的代理查询 graphql API,但收到错误消息。我正在为我的服务器使用 graphql yoga,并从 CMS 连接到另一个 graphql API。这是我的代码:

服务器.js

const { GraphQLServer } = require('graphql-yoga');
const Prismic = require('./prismic.config.js');
const gql = require('graphql-tag');

const typeDefs = `
type Query {
page(lang: String, uid: String): Page
}

type Page {
page_title: [TextField]
}

type TextField {
text: String
}
`

const resolvers = {
Query: {
page: (parent, args, context, info) => {
const query = gql`${context.request.body.query}`;

const result = context.Prismic.query({
query,
variables: { ...args }
})
.then(resp => {
return resp.data.page;
})
.catch(err => console.log(err));
return result;
}
}
}

const server = new GraphQLServer({
typeDefs,
resolvers,
context: req => ({ ...req, Prismic })
})

server.start(() => console.log('Server is running on localhost:4000'))

下面是我在 Graphql Yoga 附带的 graphql playground 中的查询:

query {
page(lang: "en-gb", uid: "homepage") {
page_title {
text
}
}
}

我收到的错误是:

'Query does not pass validation. Violations:\n\nField \'page_title\' of type \'Json\' must not have a sub selection. (line 3, column 5):\n page_title {\n ^' } },

奇怪的是,如果我在没有嵌套的 text 字段的情况下对查询进行硬编码,我可以获得有效的响应,因为服务器上的错误提示如下:

// const query = gql`${context.request.body.query}`;

const query = gql`
query($uid: String!) {
page(lang: "en-gb", uid: $uid) {
page_title
}
}
`;

尝试修改我在 graphql playground 中的查询,使其不包含嵌套的 text 字段,如下所示:

query {
page(lang: "en-gb", uid: "homepage") {
page_title
}
}

给我以下错误并且根本不允许我提出请求:

field "page_title" of type "[TextField]" must have a selection of subfields. Did you mean "page_title { ... }"?

错误表明我需要添加 text 的嵌套子字段,这是预期的,但是当我使用此查询而不是服务器上的硬编码查询时,它会给我前面提到的错误。

不确定我的设置是否有问题?

谢谢

最佳答案

在您的 GraphQL 架构中page_title: [TextField] 不是 Scalar Types 之一

因此,在进行查询期间,您需要定义您需要获取的确切字段?并且您在查询中的字段应该扩展到只有标量类型的级别,这样 GraphQL 就会知道如何解析您的查询。

所以这是唯一应该来自第一级的查询(来自 Graphql Yoga 附带的 graphql playground):

query {
page(lang: "en-gb", uid: "homepage") {
page_title {
text
}
}
}

但是服务器的错误是从您在 graphql 解析器中进行 graphql 查询的方法抛出的:

const result = context.Prismic.query({
query,
variables: { ...args }
})

所以我 100% 确定 Prismic 中的 page_title 具有自定义标量 - JSON。因此,您不能对此请求使用相同的查询。

关于javascript - 使用 graphql-yoga 的子字段上的 Graphql 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53660145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com