我有一个位于开发、登台和生产服务器上的站点。在开发和登台服务器上,功能 100% 正常,但是在生产服务器上,最奇怪的事情发生了——“未定义”被添加到 URL 路径中。
这是正在发生的事情的简短示例:
在index.html 中,我有一个锚标记用于使用护照注销会话:
<a href="auth/logout">Logout</a>
。
它会转到我的节点服务器上的这条路由:
// passport oauth logout
routes.get('/auth/logout', (req, res) => {
req.session.destroy((e) => {
req.logout();
res.redirect(config.redirects.env.prod);
});
});
在开发和登台时,这会破坏会话并将您重定向到
/
。在生产中,当您单击按钮时,它会随机转到此 URL https://somesite.com/auth/undefined
。
关于如何调试这个有什么想法吗?这对我来说毫无意义,而且我在服务器端或标记中没有找到任何会导致这种情况的东西,特别是因为它在开发和登台上起作用。所有服务器都是 Ubuntu 服务器,设置方式完全相同。
我能够解决这个问题。奇怪的是,在用于文件上传的完全不相关的路线中的 400 行下面,我有一行代码引用了
config.redirects.env.production
而不是 config.redirects.env.prod
。我什至没有查看该路线,因为它甚至不是我目前正在测试的功能的一部分,并且我没有看到任何错误(同样,因为该路线尚未被引用/使用)。
修复该拼写错误解决了在 URL 中插入“未定义”的奇怪问题。仍然不确定它是如何成功地冒出这样的。
FWIW 我正在使用 Render.com,但遇到了这个问题。
具体来说,似乎“未定义”被插入到我的路径中。
结果我使用了一个未正确加载的 process.env 变量。目前尚不清楚 Next.JS 是否能与 Render.com 配合良好。现在,我通过将 .env.Production 文件提交到我的存储库来解决该问题。