Now 2 迁移的问题
Problems with Now 2 migration
作为 Spectrum 上的 stated here,我在将我的 Next 网站从 Express 自定义服务器迁移到 Now 时遇到了麻烦。我的问题是我无法获得主页,因为我试图发送 URL 参数,但没有成功。我需要传递一个lang
参数,如下:
localhost:3000/en
然后,我必须按预期获得家庭。但是我收到了这个异常:
TypeError: Cannot read property 'lang' of undefined at Function.getInitialProps (/Users/lucacattide/Vagrant/debian/public/LC/front-end/.next/server/static/development/pages/_document.js:1111:32)
那是因为我之前因为各种原因从_document.js
getInitialProps
读取了ctx.req.params.lang
参数。即使用 ctx.req.query.lang
替换它,我仍然明白。
我目前正在复制 Zeit 迁移指南和文章中的两个示例。正如两者所暗示的,我正在尝试 API
方法 (https://zeit.co/guides/migrate-to-zeit-now/) and the pages
one too (https://zeit.co/guides/custom-next-js-server-to-routes/)。
在 API 中,我在 /api
路径中实现了 [lang].js
段,内容如下:
module.exports = (req, res) => {
res.send(req.query.lang);
}
然后在 /pages
中,我在同一路径中将 index.js
复制并重命名为 [lang].js
,并替换了上面提到的 req.query.lang
。这两个都不起作用。我遇到了同样的异常,警告 _document.js
。我需要它,因为它内部有不同的进程,所以删除它不是我的选择。
当然,我正在 localhost
上测试 Now 环境 (运行 now dev
)。该应用程序在 Express 上运行完美,所以我希望解决这个问题以便在 Now 上正确部署它。
有没有人以前遇到过这种情况或者可以帮助我提出一些建议?
在此先感谢您的支持。
编辑:
我也尝试通过在 now.json
中定义路线来强制路径,但结果是一样的。这是我当前的配置:
{
"public": false,
"name": "LC",
"version": 2,
"routes": [{
"src": "/(?<lang>[^/]+)",
"dest": "/?lang=$lang"
}]
}
编辑 2:
我按照第二个指南的建议切换了所有 pages
目录,因为我没有从 /api
中得到任何东西。尝试仅放置 [lang].js
路由并从 now.json
.
中删除路由定义
此刻,通过检查 req
对象,我收到了一个空对象。
如果您像这样使用传递语言 localhost:3000/en
然后使用下面的代码片段访问此
req.params.lang
但是如果你像这样传递 lang localhost:3000?lang=en
然后使用这个
req.query.lang
由于 Now 平台更新 - v2 - 我注意到很多 Next API 部分发生了变化。通过修改我的代码以遵循新方法,我能够获得之前丢失的参数。
在细节上,我遵循了 latest official documentation
上的 API 路线提示
感谢大家的帮助。
作为 Spectrum 上的 stated here,我在将我的 Next 网站从 Express 自定义服务器迁移到 Now 时遇到了麻烦。我的问题是我无法获得主页,因为我试图发送 URL 参数,但没有成功。我需要传递一个lang
参数,如下:
localhost:3000/en
然后,我必须按预期获得家庭。但是我收到了这个异常:
TypeError: Cannot read property 'lang' of undefined at Function.getInitialProps (/Users/lucacattide/Vagrant/debian/public/LC/front-end/.next/server/static/development/pages/_document.js:1111:32)
那是因为我之前因为各种原因从_document.js
getInitialProps
读取了ctx.req.params.lang
参数。即使用 ctx.req.query.lang
替换它,我仍然明白。
我目前正在复制 Zeit 迁移指南和文章中的两个示例。正如两者所暗示的,我正在尝试 API
方法 (https://zeit.co/guides/migrate-to-zeit-now/) and the pages
one too (https://zeit.co/guides/custom-next-js-server-to-routes/)。
在 API 中,我在 /api
路径中实现了 [lang].js
段,内容如下:
module.exports = (req, res) => {
res.send(req.query.lang);
}
然后在 /pages
中,我在同一路径中将 index.js
复制并重命名为 [lang].js
,并替换了上面提到的 req.query.lang
。这两个都不起作用。我遇到了同样的异常,警告 _document.js
。我需要它,因为它内部有不同的进程,所以删除它不是我的选择。
当然,我正在 localhost
上测试 Now 环境 (运行 now dev
)。该应用程序在 Express 上运行完美,所以我希望解决这个问题以便在 Now 上正确部署它。
有没有人以前遇到过这种情况或者可以帮助我提出一些建议?
在此先感谢您的支持。
编辑:
我也尝试通过在 now.json
中定义路线来强制路径,但结果是一样的。这是我当前的配置:
{
"public": false,
"name": "LC",
"version": 2,
"routes": [{
"src": "/(?<lang>[^/]+)",
"dest": "/?lang=$lang"
}]
}
编辑 2:
我按照第二个指南的建议切换了所有 pages
目录,因为我没有从 /api
中得到任何东西。尝试仅放置 [lang].js
路由并从 now.json
.
此刻,通过检查 req
对象,我收到了一个空对象。
如果您像这样使用传递语言 localhost:3000/en
然后使用下面的代码片段访问此
req.params.lang
但是如果你像这样传递 lang localhost:3000?lang=en
然后使用这个
req.query.lang
由于 Now 平台更新 - v2 - 我注意到很多 Next API 部分发生了变化。通过修改我的代码以遵循新方法,我能够获得之前丢失的参数。 在细节上,我遵循了 latest official documentation
上的 API 路线提示感谢大家的帮助。