正如Spectrum上所说,我在将下一个网站从Express自定义服务器迁移到Now时遇到了麻烦。我的问题是我无法获取主页,因为我正在尝试发送 URL 参数,但没有成功。我需要传递一个lang
参数,如下所示:
localhost:3000/en
然后,我必须按预期得到家。但是我收到此异常:
TypeError: 无法读取 Function.getInitialProps 中未定义的属性 'lang' (/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/(和pages
方法(https://zeit.co/guides/custom-next-js-server-to-routes/(。 在 API 中,我在路径([lang].js
段(中实现了/api
内容:
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
对象,我收到一个空对象。
如果您像这样使用传递 langlocalhost:3000/en
那么请使用下面的代码片段来访问这个
req.params.lang
但是如果你像这样传递朗localhost:3000?lang=en
然后使用这个
req.query.lang
由于现在平台更新 - v2 - 我注意到很多 Next API 部分都发生了变化。通过修改我的代码以遵循新方法,我能够获得以前缺少的参数。 详细地,我遵循了最新官方文档中的 API 路由提示
谢谢大家的帮助。