首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >graphql-tag:如何获得主体请求的实际字符串?

graphql-tag:如何获得主体请求的实际字符串?
EN

Stack Overflow用户
提问于 2022-03-05 11:54:27
回答 2查看 589关注 0票数 3

我想使用库https://github.com/apollographql/graphql-tag,我正在寻找一个比我更聪明的人,知道如何实际使用它。

假设我有一个如下所示的GraphQL查询文档:

代码语言:javascript
运行
复制
const query = gql`
  {
    user(id: 5) {
      ...User_user
    }
  }
  ${userFragment}
`

现在如何获得要添加到http请求的字符串?我最终得到了一个对象,它允许我进行一些内省和操作,很好,但是如何获得服务器请求的实际正文字符串呢?

我错过了一些显而易见的东西我想..。

EN

回答 2

Stack Overflow用户

发布于 2022-06-08 09:50:57

qql应用于graphql查询代码所获得的对象是graphql的AST (抽象语法树)。此AST通常与阿波罗客户端一起使用来执行请求.但是,您可以使用能够使用AST执行GraphQL请求的任何其他库。

假设你愿意使用阿波罗,下面是他们网站上的一个例子,它是如何工作的(https://www.apollographql.com/docs/react/data/queries)。

代码语言:javascript
运行
复制
import { gql, useQuery } from '@apollo/client';

const GET_DOGS = gql`
  query GetDogs {
    dogs {
      id
      breed
    }
  }
`;

function Dogs({ onDogSelected }) {
  const { loading, error, data } = useQuery(GET_DOGS);

  if (loading) return 'Loading...';
  if (error) return `Error! ${error.message}`;

  return (
    <select name='dog' onChange={onDogSelected}>
      {data.dogs.map((dog) => (
        <option key={dog.id} value={dog.breed}>
          {dog.breed}
        </option>
      ))}
    </select>
  );
}

本例用于使用钩子(这是使用阿波罗的主要方法)。如果您仍然想使用阿波罗,但不使用React,那么您可以使用裸ApolloClient并仍然使用AST来运行查询。请参阅下面的链接,了解如何直接使用ApolloClient。

https://www.apollographql.com/docs/react/api/core/ApolloClient/

最后,如果您不愿意使用阿波罗和/或AST,您可以直接执行查询。在这种情况下,您不需要使用gql并将其解析为AST。请参阅下面一个简化但有效的示例。

代码语言:javascript
运行
复制
const query = `
query($id: Int!) {
    user(id: $id) {
        id
        login
        email
    }
}
`;

const variables = {
    id: 5
};

const result = await fetch("http://your-graphql-backend.tld", {
    method: "POST",
    body: JSON.stringify({
        query,
        variables,
    }),
    headers: {
        "content-type": "application/json",
    }
});

注意:上面的实现(特别是查询部分)取决于您的GraphQL模式和后端实现。它可能有所不同,但原则上,这应该适用于大多数现代graphql后端。

票数 2
EN

Stack Overflow用户

发布于 2022-11-21 13:46:54

要回答原来的问题:

现在如何获得要添加到http请求中的字符串?

假设如上面的示例所示,您已经对AST进行了解析,原因包括使用片段(或其他原因,请参阅https://github.com/apollographql/graphql-tag#why-use-this)。

在这种情况下,您可以使用graphql的print助手函数解析AST到string,如下所示:

代码语言:javascript
运行
复制
import gql from 'graphql-tag';
import { print } from 'graphql/language/printer';

const AST = gql`
  {
    user(id: 5) {
      ...User_user
    }
  }
  ${userFragment}
`
const query = print(AST);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71361951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档