【问题标题】:Next.js Router.push does not set any req.headersNext.js Router.push 没有设置任何 req.headers
【发布时间】:2019-07-06 08:13:38
【问题描述】:

在从另一个端点执行客户端 Router.push() 后,我在 getInitialProps 函数中执行后端查询时遇到问题。

这就是我的意思。在我的注册页面,我调用Router.push('/')返回首页:

  proceedToIndex = () => {
    Router.push('/');
  }

在我的“/”页面中,我调用 getInitialProps 如下:

  static async getInitialProps (context) {
    try {
      if (context.req.headers.cookie) {
          const resp = await getUser(context.apolloClient);

          if (resp.data.getUser && resp.data.getUser.id) {
            return { user: resp.data.getUser };
          }
      };
    } catch(e) {
      console.log(e);
    }
    return { user: undefined };
  }

我最终遇到了一个崩溃,说不能为 context.req.headers.cookie 调用未定义的 cookie。因此,当我执行 Router.push('/') 时,标题是未定义的。这里发生了什么?如何在上下文中将标头提供给我的请求对象?

【问题讨论】:

标签: javascript reactjs next.js


【解决方案1】:

使用 Router.push 时没有请求。它是一个客户端 API,请求只存在于初始服务器渲染中。

【讨论】:

  • 这似乎不再是真的了。一个简单的 console.log(context.req.cookies);在 getServerSideProps(context) 将为您提供具有最新信息的请求对象。但是,对于任何尝试使用新数据重新渲染同一页面的人,您应该将 key prop 传递给需要根据数据进行更改的组件。
  • @joshu getServerSideProps 始终在服务器上运行,因此可以访问请求。问题是关于在服务器 客户端上运行的 getInitialProps。
猜你喜欢
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 2021-04-30
  • 2021-11-22
  • 2019-03-07
  • 2020-07-22
  • 2021-01-01
  • 2015-02-19
相关资源
最近更新 更多