apollo graphql 请求必须包括:"query" 或 "queryId"

apollo graphql request must include: "query" or "queryId"

我正在尝试使用 apollo graphql 和 drupal 构建一个 nextjs 网站。

我可以获取页面,但是当我尝试使用搜索组件查询我构建的页面时,我的请求失败了。

我的查询如下所示:

  const [loadSearch, {loading, error, fetchMore}] = useLazyQuery(SEARCH, {
    notifyOnNetworkStatusChange: true,
    onCompleted: (data) => {
      console.log(data);
    },
    onError: (err) => {
      console.log(err);
    }
  });

  useEffect(() => {
    loadSearch({
      variables: {
        query: "test"
      },
    });
  }, [search]);

我的查询如下:

export const SEARCH = gql`
  query search($query: String!) {
    search(query: $query, access: "Search") {
        ... on SearchDocuments {
        total
        type
        documents {
          id
          parent {
            id
            labelOnly
            path
            title
            type
          }
          path
          status
          summary
          title
          type
        }
      }
    } 
  } 
`;

我在控制台中得到的错误是:

Error: GraphQL Request must include at least one of those two parameters: "query" or "queryId"

我可以确认查询在 drupal 中有效:

非常感谢任何帮助

编辑: 这个错误仍然发生,即使我已经修改为只使用查询:

  const {loading, error, fetchMore} = useQuery(SEARCH, {
    variables: {
      query: "test"
    },
    notifyOnNetworkStatusChange: true,
    onCompleted: (data) => {
      console.log(data);
      console.log('set real data')
    },
    onError: (err) => {
      console.log(err);
      console.log('set dummy data');
    }
  });

在传递 $query 参数时调用 graphQL api 时,您需要在搜索中传递任何关键字

原文:

useLazyQuery(SEARCH, ...

像下面这样使用:

useLazyQuery(SEARCH, {query: "test"} ... 

折腾了半天终于弄明白了,这么小的一个地方,却很容易出错。

问题是我在 .env.local 文件中使用我的 ip,正斜杠如下所示:

GRAPHQL_BASE_URL='http://192.xxx.xxx.x/'
NEXT_PUBLIC_GRAPHQL_CLIENT_BASE_URL='http://192.xxx.xxx.x/'

WATCHPACK_POLLING=true

这个正斜杠对页面路由没有影响,因为一切正常,但这是我的 useLazyQuery 的一个问题,它依赖于 url 参数进行搜索。

删除斜杠解决了这个问题:

GRAPHQL_BASE_URL='http://192.xxx.xxx.x'
NEXT_PUBLIC_GRAPHQL_CLIENT_BASE_URL='http://192.xxx.xxx.x'

WATCHPACK_POLLING=true