【发布时间】: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