我正在使用 https://www.npmjs.com/package/apollo-client graphQl 的库,但我面临一个问题,当我使用查询时,它应该是 GET 请求,但它在网络选项卡中显示它是 POST 请求。
是否需要在下面的代码中传递一些额外的参数才能使其成为 GET 请求。
const dataPage = await apolloClient.query({
query: getCategoryDetail(
id,
queryParams,
enabledFilters,
region !== undefined ? region : regionID
),
variables: params
});
以下是产品搜索的查询,运行完全正常
let graphql = `
query category(
${params}
) {
${defaultCategory != null ? categorySearch : ''}
products(
pageSize: $pageSize
currentPage: $currentPage
${textSearch}
filter: {
${filter}
}
sort: {
${sort}
}
region:
"${region}"
) {
${searchFilters}
items {
${productFields}
}
page_info {
total_pages
current_page
}
total_count
}
}
`;
GrpahQL 操作始终是 POST 请求,不应该是 GET。您想要发出 GET 请求的任何具体原因。
默认情况下,Apollo 客户端会发出 POST 请求。
如果您需要使用
GET
请求,那么您可以使用useGETForQueries
。 注意: 这将使所有 graphQL 调用变为 GET 请求。这是一个代码示例,
const client = new ApolloClient({
link: from([
new HttpLink({
uri: "/graphql",
useGETForQueries: true, // <--- to enable GET requests
}),
]),
});
如果您需要特定查询来使用
GET
,请使用像这样的useQuery
钩子,
// useQuery
const { data } = useQuery(query, {
context: { fetchOptions: { method: "GET" } },
});
// useLazyQuery
const [getEmpData, { loading, data }] = useLazyQuery(query, {
context: { fetchOptions: { method: "GET" } },
});