如何配置Laravel Lighthouse为GraphQL提供服务器端渲染?

问题描述

我将Apollo客户端用于我的React前端,以便能够使用Laravel Lighthouse托管的GraphQL。

正常使用案例是可行的,但是我现在遇到了某些情况,我想在初始页面请求上预取GraphQL结果,而不是让浏览器加载页面然后发送单独的ajax查询

我看到Apollo client同时支持“商店补水”和“服务器端渲染”,但是我在Lighthouse中没有找到有关如何实现此操作的文档。

我认为我的Blade视图需要包含以下内容

<script>        
    window.__APOLLO_STATE__ = '{!!$postsGqlResultJson ?? "null" !!}'; // https://www.apollographql.com/docs/react/performance/server-side-rendering/
</script>

那么问题是:如何生成$postsGqlResultJson


更新:

假设我在前端:

const POSTS = gql`
    query Posts($first: Int,$page: Int) {
        posts(first: $first,page: $page,orderBy: { field: CREATED_AT,order: DESC }) {
            paginatorInfo {
                currentPage
                hasMorePages
                total
            }
            data {
                id
                ...
            }
     }
`;
const options = {
  variables: {
        first: 100,page: 1,}
};
const { loading,error,data } = useQuery(query,options);

我认为Lighthouse可能会提供与useQuery等效的PHP函数在这里我可以以某种方式提供相同的参数(POSTS gql和options对象),并且它将返回JSON字符串。结果数据,如GQL中所述嵌套。

我误会了吗?非常感谢您的帮助。 :-)

解决方法

您描述的Apollo客户端功能似乎是对前端的关注,并假设您正在从Node.js服务器提供前端。

在Lighthouse中没有什么特别的事情-从它的角度来看,查询是作为服务器端呈现的一部分发送还是从客户端发送都无所谓。