我想使用库https://github.com/apollographql/graphql-tag,我正在寻找一个比我更聪明的人,知道如何实际使用它。
假设我有一个如下所示的GraphQL查询文档:
const query = gql`
{
user(id: 5) {
...User_user
}
}
${userFragment}
`
现在如何获得要添加到http请求的字符串?我最终得到了一个对象,它允许我进行一些内省和操作,很好,但是如何获得服务器请求的实际正文字符串呢?
我错过了一些显而易见的东西我想..。
发布于 2022-06-08 09:50:57
将qql
应用于graphql查询代码所获得的对象是graphql的AST (抽象语法树)。此AST通常与阿波罗客户端一起使用来执行请求.但是,您可以使用能够使用AST执行GraphQL请求的任何其他库。
假设你愿意使用阿波罗,下面是他们网站上的一个例子,它是如何工作的(https://www.apollographql.com/docs/react/data/queries)。
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。请参阅下面一个简化但有效的示例。
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后端。
发布于 2022-11-21 13:46:54
要回答原来的问题:
现在如何获得要添加到http请求中的字符串?
假设如上面的示例所示,您已经对AST进行了解析,原因包括使用片段(或其他原因,请参阅https://github.com/apollographql/graphql-tag#why-use-this)。
在这种情况下,您可以使用graphql的print助手函数解析AST到string,如下所示:
import gql from 'graphql-tag';
import { print } from 'graphql/language/printer';
const AST = gql`
{
user(id: 5) {
...User_user
}
}
${userFragment}
`
const query = print(AST);
https://stackoverflow.com/questions/71361951
复制相似问题