如何从 2 个 API 查询数据



我已经设置了一个Gatsby客户端,它使用gatsby-source-contentful插件连接到Contentful。我还连接了一个简单的自定义 API,该 API 使用gatsby-source-graphql插件连接。

  • 当我运行开发服务器时,我能够从操场中的Contentful查询我的页面。
  • 我还可以通过操场查询我的自定义 API。
  • 因此,这两个 API 都可以工作并与 Gatsby 正确连接。

我想以编程方式生成一堆具有动态部分(参考(的页面,作者可以根据自己的意愿添加和排序。

我确实使用...on Node连接以及我在每个动态部分中定义的片段来实现这一点。到目前为止,一切进展顺利。

我的实际问题:

现在我有一个动态部分,它是一个工作列表。此组件需要从内容 API 中获取数据,因为它存储纬度和经度等值。因此,作者可以自由地在地图上设置一个点并设置半径。我使用组件中的片段成功地从 Contentful 中获取了此信息:

export const query = graphql `
fragment JoblistModule on ContentfulJoblisteMitAdresse {
... on ContentfulJoblisteMitAdresse {
contentful_id
radius
geo {
lon
lat
}
}
}`

但是,如何将此信息传递给另一个从自定义 API 获取作业数据的查询?如果我正确理解盖茨比,我必须以某种方式将这两个 API 连接在一起?或者我可以以某种方式运行另一个查询来获取作为变量传入的这些值?我将如何以及在哪里实现这一目标?

我在gatsby-node.js内找不到任何方法(因为传入的上下文只能用作查询中的变量(或模板文件(因为我一次只能运行 1 个查询(,也找不到组件本身(因为这只接受 staticQuery(

我不知道我的误解在哪里。因此,我将非常感谢任何提示,帮助或示例。

由于您的自定义 API 是一个 graphQL API,因此您可以使用graphql-tools包中的 delegateToSchema 来完成此操作。

您需要使用 Gatsby 的 setFieldsOnGraphQLNodeType API 创建一个解析器。 在此解析器中,您的解析函数将调用delegateToSchema

我们有一个类似的问题,我们的博客文章有一个包含ID的"作者"字段。 然后,我们对另一个系统进行 graphQL 查询,以通过该 ID 查找作者信息。

return {
remoteAuthor: {
type: person,
args: {},
resolve: async (source: ContentfulBlogPost, fieldArgs, context, info) => {
if (!source.author) {
return null
}
// runs the selection on the remote schema
// https://github.com/gatsbyjs/gatsby/issues/14517
return delegateToSchema({
schema: authorsSchema,
operation: 'query',
fieldName: 'Person',
args: { id: source.author },
context,
info,
})
},
},
}

这会为我们的博客文章类型添加一个"remoteAuthor"字段,每当查询到它时,这些选择都会代理到person类型所在的远程架构。

相关内容

  • 没有找到相关文章

最新更新