我想要一个单独的动态路由来处理这个应用程序中的所有请求,所以我写了一个名为[[...slug]].js
的文件来处理这个请求。我使用getServerSideProps()
来加载数据,所以它通常是服务器端呈现的。我没有任何index.js
文件。
当它以开发模式在本地运行时,它运行得非常好。当部署(到Vercel(时,除了到/
的链接外,所有东西都能正常工作。<Link href={"/"}>…
将从服务器请求一个index.json文件,得到404响应并显示错误页面。为什么?
明白了!
我使用getServerSideProps()
根据段塞来获取数据。(实际内容来自Sanity.io,查询内容的slug
属性是否与URL中的slug
或默认页面段符相匹配(。
当使用next dev
在本地开发模式下运行应用程序时,加载根("/"(URL时,params.slug
参数将为undefined
。无论根URL是通过刷新还是导航操作(单击指向/的链接,使用后退按钮(加载的,它都具有相同的值。
但是,当部署站点时,这种行为会发生变化。当页面第一次加载时,params.slug
仍然是undefined
,但如果它响应客户端导航事件加载,则段塞会突然设置为index
。由于我既没有一个包含slugindex
的页面,也没有确保在请求index
时使用默认的slug,所以我得到了意外的404响应。使用"index"
作为触发默认段塞的值之一可以修复它
我不知道这是否是Next JS中的一个bug,但它确实让我困惑了一段时间。