【问题标题】:Getting 404 when loading dynamic routes on nextjs在 nextjs 上加载动态路由时出现 404
【发布时间】:2023-03-03 11:20:01
【问题描述】:

我创建了一个动态路由,例如 [results].js

import { useRouter } from 'next/router'

const Post = () => {
    const router = useRouter();
    const { results } = router.query;

    return <p>Post: {results}</p>
}

export default Post

并配置我的 next.confi.js

module.exports = {
    trailingSlash: true,
}

它在开发模式下运行良好,但在生产模式下,我在 npm 运行导出后动态页面路由的唯一问题。当我浏览 htttps://my-domain/search/searchslog 它得到 404 错误页面。

【问题讨论】:

  • Next.js 使用基于文件的路由。你的目录结构是什么?
  • 我的目录结构是-search/[result].js

标签: reactjs next.js


【解决方案1】:

next export 将预渲染所有页面并将您的应用导出为静态 HTML。对于您的动态路由,您需要使用 getStaticPaths 让 Next.js 知道要为该路由生成哪些 HTML 页面。

// pages/search/[results].js

export async function getStaticPaths() {
    return {
        paths: [
            { params: { results: 'result1' } },
            { params: { results: 'result2' } }
        ],
        fallback: false
  };
}

上面的函数会生成/search/result1/search/result2页面。任何其他/serach/* 页面都会导致 404。

【讨论】:

  • 我在&lt;input className="text-field" type="text" value={this.state.userName} onChange={event =&gt; this.setState({userName: event.target.value})}/&gt; &lt;a href={'/search/'+this.state.userName} className="search-button"&gt;&lt;/a&gt; 中尝试了类似下面的搜索。如果搜索键与获取 API 数据匹配,则 [result].js 上有一些条件。它在开发模式下工作,但我的生产是显示404.跨度>
  • 你不能真正使用这样的静态生成的动态路由页面。所有可能的搜索路径 (/search/*) 都需要在构建时预渲染,而不是 404。尝试使用 URL 中的查询参数来传递搜索词 (/search?key=value)。
  • 我需要一个类似的 URL www.domain-name.com/search-any-keys 用于搜索结果。对此的组件设计是什么?
猜你喜欢
  • 2020-05-21
  • 2020-06-20
  • 2020-09-04
  • 1970-01-01
  • 2021-10-12
  • 2020-12-16
  • 2020-12-19
  • 2022-08-10
  • 1970-01-01
相关资源
最近更新 更多