【问题标题】:NextJS routing doesnt work when deployed but works when using my local serverNextJS 路由在部署时不起作用,但在使用我的本地服务器时起作用
【发布时间】:2020-11-27 08:28:55
【问题描述】:

我有以下网址:

/job/engineer_123456/edit/abcde

现在,当我运行本地服务器时:npm run dev ("next src/") 然后当我转到该链接时,它就可以工作了。但是,当我部署我的项目(到 firebase)时,我会从该 url 获得 404。

我感觉路由中存在冲突,因为我的 NextJS 页面目录结构看起来像 /job 在页面下):

可能是由于某种原因在生产中,当我转到该链接时,我将转到 /job/[job].js 而不是 /job/[job]/edit/[editId].js

我真的很困惑为什么生产显示 404 页面但在本地它可以工作。

【问题讨论】:

  • 嗯?这和这有什么关系?

标签: reactjs next.js


【解决方案1】:

根据文档:

预定义路由优先于动态路由,动态路由优先于捕获所有路由。看看下面的例子:

pages/post/create.js - 将匹配 /post/create

pages/post/[pid].js - 将匹配 /post/1、/post/abc 等,但不匹配 /post/create

pages/post/[...slug].js - 将匹配 /post/1/2、/post/a/b/c 等,但不匹配 /post/create, /post/abc

*通过自动静态优化进行静态优化的页面将在不提供路由参数的情况下进行水合,即查询将是一个空对象 ({})。

水化后,Next.js 将触发更新您的应用程序以在查询对象中提供路由参数。*

所以,你需要有类似的东西:

pages - folder
    job - folder
        [...slug] - folder
            - index.js
            edit - folder
                - index.js

slug 文件夹将充当所有 /job/[slug] 路由的“模板”,其中包含 index.js 和编辑页面

【讨论】:

  • 结果然后在Error: Catch-all must be the last part of the URL.
  • 抱歉,事实上,既然您需要 editID,您的编辑文件夹中应该有 [...slug.js] !这将捕获所有 ID,理想情况下,index.js 将是包含所有对象的索引页面
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2017-09-10
  • 2021-10-19
相关资源
最近更新 更多