具有阿波罗身份验证的下一个 Js,无法读取未定义的属性“查询”

Posted

技术标签:

【中文标题】具有阿波罗身份验证的下一个 Js,无法读取未定义的属性“查询”【英文标题】:Nexjs with apollo auth, cannot read property 'query' of undefined 【发布时间】:2019-05-21 13:30:41 【问题描述】:

我一直在从 Nextjs repo 引导到这个示例,并将其实施到我的项目中,但抛出了这个错误:

我的 API 不适用于 json Web 令牌,但我已经使用 cookie 正确定义了 ApolloProvider...您可以在此处查看完整代码:

截图的组件来自pages/login.js。

https://github.com/MontoyaAndres/BarHalem

并测试它在服务器文件夹docker-compose -f docker-compose.dev.yml up --build 和客户端文件夹中运行:yarn dev

【问题讨论】:

【参考方案1】:

只需在 withApollo.js 文件中添加 ctx.ctx.apolloClient = apollo 即可。完整的代码是:

import React from "react";
import Head from "next/head";
import  getDataFromTree  from "react-apollo";

import initApollo from "./initApollo";

export default App => 
  return class WithData extends React.Component 
    static displayName = `WithData($App.displayName)`;

    static async getInitialProps(ctx) 
      const  Component, router  = ctx;
      const apollo = initApollo();

      ctx.ctx.apolloClient = apollo;

      let appProps = ;
      if (App.getInitialProps) 
        appProps = await App.getInitialProps(ctx);
      

      // Run all GraphQL queries in the component tree
      // and extract the resulting data
      if (!process.browser) 
        try 
          // Run all GraphQL queries
          await getDataFromTree(
            <App
              ...appProps
              Component=Component
              router=router
              apolloClient=apollo
            />
          );
         catch (error) 
          console.error("Error while running `getDataFromTree`", error);
        

        // getDataFromTree does not call componentWillUnmount
        // head side effect therefore need to be cleared manually
        Head.rewind();
      

      // Extract query data from the Apollo store
      const apolloState = apollo.cache.extract();

      return 
        ...appProps,
        apolloState
      ;
    

    constructor(props) 
      super(props);
      this.apolloClient = initApollo(props.apolloState);
    

    render() 
      return <App ...this.props apolloClient=this.apolloClient />;
    
  ;
;

【讨论】:

是的,这解释了未定义的上下文

以上是关于具有阿波罗身份验证的下一个 Js,无法读取未定义的属性“查询”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法在身份验证时读取未定义的属性“jwtoken”

无法读取未定义的 reactjs JWT 身份验证的属性“令牌”

无法读取未定义的属性“电子邮件”; firebase 身份验证();使用 Vuex

无法使用 Ngrx 读取未定义的属性“firebaseApp”

Flutter Web和Firebase身份验证TypeError:无法读取未定义的属性'app'

vue-router.esm.js?8c4f:2181 TypeError:无法读取未定义的属性“loggedIn”