0

正如Spectrum 上所述,我在将 Next 网站从 Express 自定义服务器迁移到 Now 时遇到了麻烦。我的问题是我无法获取主页,因为我正在尝试发送 URL 参数,但没有成功。我需要传递一个lang参数,如下:

localhost:3000/en

然后,我将不得不按预期获得 Home。但我收到了这个例外:

TypeError:无法读取 Function.getInitialProps 处未定义的属性“lang”(/Users/lucacattide/Vagrant/debian/public/LC/front-end/.next/server/static/development/pages/_document.js: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 -服务器到路由/)。在 API 之一中,我在/api路径内部实现了[lang].js段,具有以下内容:

module.exports = (req, res) => {
  res.send(req.query.lang);
}

然后用那个,我在同一路径中/pages复制并重命名为index.js,并替换了上面提到的。这两个都不行。我遇到了同样的异常,警告. 我需要它,因为它内部有不同的过程,所以在我的情况下删除它不是一个选项。当然,我正在我的. 该应用程序在 Express 上完美运行,因此我希望解决此问题以便在 Now 上正确部署它。[lang].jsreq.query.lang_document.jsnow devlocalhost

有没有人经历过这个或者可以帮助我一些建议?

提前感谢您的支持。

编辑:

我也尝试通过定义路径来强制路径,now.json但结果是一样的。这是我当前的配置:

{
  "public": false,
  "name": "LC",
  "version": 2,
  "routes": [{
    "src": "/(?<lang>[^/]+)",
    "dest": "/?lang=$lang"
  }]
}

编辑2:

我按照第二指南的建议切换了所有内部pages目录,因为我没有从/api. 尝试仅放置一条[lang].js路线并从中删除路线定义now.json

此时,通过检查req对象,我收到一个空对象。

4

2 回答 2

0

如果您正在使用这样的传递语言,localhost:3000/en那么使用下面的代码片段来访问它

req.params.lang

但是如果你像这样传递 langlocalhost:3000?lang=en

然后用这个

req.query.lang
于 2019-10-18T06:31:18.313 回答
0

由于 Now 平台更新 - v2 - 我注意到很多 Next API 部分发生了变化。通过修改我的代码以遵循新方法,我可以获得以前缺少的参数。详细的,我按照最新官方文档的API routes Tips

感谢大家的帮助。

于 2019-10-22T06:34:47.153 回答