就像Spectrum上的stated here一样,我在将Next网站从Express自定义服务器迁移到Now时遇到了麻烦。我的问题是我无法获得主页,因为我试图发送URL参数,但没有成功。我需要传递一个lang
参数,如下所示:
localhost:3000/en
然后,我必须按预期方式获得房屋。但我收到此异常:
TypeError:无法读取Function.getInitialProps(/Users/lucacattide/Vagrant/debian/public/LC/front/end/.next/server/static/development/pages/_document.js中未定义的属性'lang': 1111:32)
这是因为出于各种原因,我以前从ctx.req.params.lang
_document.js
读取getInitialProps
参数。即使将其替换为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之一中,我在/api
路径[lang].js
段内实现了以下内容:
module.exports = (req, res) => {
res.send(req.query.lang);
}
然后使用/pages
,在同一路径中将index.js
复制并重命名为[lang].js
,并如上所述替换了req.query.lang
。这两个都不起作用。我遇到同样的例外,它警告_document.js
。我需要这样做,因为其中的处理过程不同,因此在我看来,删除它不是一个选择。
当然,我正在now dev
上的Now环境(运行localhost
)上进行测试。该应用程序可以在Express上完美运行,因此我希望解决此问题,以便在Now上正确部署它。
任何人都曾经经历过这种情况,或者可以帮助我提出一些建议?
预先感谢您的支持。
编辑:
我也尝试通过在now.json
中定义路由来强制使用路径,但是结果是相同的。这是我当前的配置:
{
"public": false,
"name": "LC",
"version": 2,
"routes": [{
"src": "/(?<lang>[^/]+)",
"dest": "/?lang=$lang"
}]
}
编辑2:
我按照第二指南的建议在pages
目录中进行了全部切换,因为我从/api
中什么也没得到。尝试仅放置[lang].js
路由,并从now.json
删除路由定义。
此刻,通过检查req
对象,我得到了一个空对象。
答案 0 :(得分:0)
如果您使用的是localhost:3000/en
这样的语言,请在下面的代码段中使用
req.params.lang
但是,如果您像这样localhost:3000?lang=en
然后使用此
req.query.lang
答案 1 :(得分:0)
由于Now平台更新-v2-我注意到很多Next API部分已更改。通过修改代码以遵循新方法,我可以获得先前缺少的参数。 详细而言,我遵循了latest official documentation
上的API路由提示感谢大家的帮助。