【问题标题】:getInitialProps causing ERR_TOO_MANY_REDIRECTS error on my live site, but not on my local versiongetInitialProps 在我的实时站点上导致 ERR_TOO_MANY_REDIRECTS 错误,但在我的本地版本上没有
【发布时间】:2021-12-02 12:01:34
【问题描述】:

所以,我一直在尝试在我的网站上实现 cookie,以跟踪 JavaScript 对象列表,以便当用户返回页面时页面保持一致。我一直在关注本教程here

在我的本地机器上,在 localhost:3000 上使用 npm run dev,它绝对完美。但是,当我将提交推送到 GitHub 时,它构建在 Vercel 上没有任何问题,但是当我尝试访问互联网上的实时网站时,它给了我一个“ERR_TOO_MANY_REDIRECTS”错误。

我很困惑为什么它可以在我本地托管的网站上完美运行,但在投入生产时却吓坏了并且无法运行。

我想我已经将问题缩小到getInitialProps,因为当我在index.js 文件中注释掉实现时,它仍然不起作用,但是当我注释掉getInitialProps 时,它又起作用了。

这是我认为可能是问题的代码。

Home.getInitialProps = async ({req, res}) => {

    const data = parseCookies(req)
  
    if (res) {
     if (Object.keys(data).length === 0 && data.constructor === Object) {
       res.writeHead(301, { Location: "/" })
       res.end()
     }
   }
   
   return {
     data: data && data,
   }

}

这里是 parseCookies 方法的代码,导入为

import { parseCookies } from "../helpers/index"

在我的index.js

import cookie from "cookie"
export function parseCookies(req) {
  return cookie.parse(req ? req.headers.cookie || "" : document.cookie)
}

在这一点上,我非常困惑,我已经自己浏览了十几次代码,但仍然不知道我可能做错了什么。任何帮助将非常感激!如果我能提供更多信息,请告诉我!

【问题讨论】:

  • 主页组件是否处理/ 路径?如果是这样,那么如果没有设置 cookie,您将获得无限重定向。如果您删除本地拥有的 cookie,那么您应该能够复制该问题。
  • @juliomalves 啊,我明白了,你是绝对正确的。主页不是必须处理'/'吗?你能帮我指出正确的方向来解决这个问题吗?你能帮我理解为什么会这样吗?为什么没有 cookie 强制进行无限重定向?
  • 首页可以处理/,完全没问题。发生重定向是因为Object.keys(data).length === 0 && data.constructor === Object 在未设置 cookie 时返回 true。发生这种情况时,您重定向到/(主页),然后再次进行检查并再次重定向,依此类推。告诉我,重定向背后的想法是什么?你想完成什么?
  • @juliomalves 所以,我会对你说实话,我真的只是按照我上面为你链接的那个教程。我相信我们这样做的原因是检查是否有 cookie 以及它们是否仍然有效。我们使用res 对象进行此检查。如果data 对象为空,则表示 cookie 无效。如果 cookie 无效,我们会将用户重定向回索引页面,而不是在重定向用户之前显示主页的 Flash。
  • 对,所以重定向逻辑应该存在于其他页面中,而不是主页中,因为那是重定向目标。

标签: reactjs redirect cookies next.js


【解决方案1】:

出现ERR_TOO_MANY_REDIRECTS 错误是因为Object.keys(data).length === 0 && data.constructor === Object 在未设置cookie 并且您访问主页时返回true。发生这种情况时,重定向会将您带回/(主页),然后再次进行检查并发生新的重定向,依此类推。

在本地,您可能设置了 cookie,因此您不会遇到此问题。但是,当您访问托管在 Vercel 上的网站时,最初不存在任何 cookie,这会触发无限重定向循环。

要解决此问题,只需从主页中删除逻辑,因为那是重定向目标。不过,您仍然可以将其放在其他页面上并重定向到主页。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多