Now 2迁移的问题

时间:2019-10-18 06:20:24

标签: javascript node.js express next.js zeit-now

就像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对象,我得到了一个空对象。

2 个答案:

答案 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路由提示

感谢大家的帮助。

相关问题