如何处理调用 API 的 Next.js 中动态路由的未找到 404? [关闭]

2023-11-27

我有一个由 React 和 Next.js 在客户端开发的网站,并从 Asp.Net core 服务器调用 API 来获取动态数据,例如产品和类别。

问题是当我请求的 URL 中有未定义的参数(需要传递给 API 来获取相关数据)时,如何重定向到 404 未找到页面。

例如,如果请求的 URL 是 https://domain/product/unique-title-of-product,则“unique-title-of-product”将传递给 API,响应的数据将显示在产品详细信息页面中。但是,如果请求的 URL 是“https://domain/product/not-existed-title”,我该如何检查并将其重定向到 404-not-found-page?

我不想将 undefined-title 传递给服务器,因为如果不处理它,它将响应 null 或 200 或 500 内部服务器错误。那么看来我必须在客户端处理 404 重定向,而无需任何服务器端交互。但是当我尝试在 next.js 中使用 404 状态代码进行重定向时,状态代码将不会反映在浏览器中。

在客户端处理此问题的最佳解决方案是什么? 或者我应该在服务器端处理它?


获得 GoogleBot 理解的真实“HTTP 404”响应的一种方法是生成 404 服务器端。

首先,在 /pages/404.js 中编写默认的 404.js 页面。

之后,将此功能添加到您的动态页面中:

export async function getServerSideProps (context) {
  // this will be called server-side only
  const pid = context.params.pid;

  // connect to your db to check if it exists, make a webservice call...
  if (!checkIfExists(pid)) {
    return { notFound: true };
    // this will display your /pages/404.js error page,
    // in the current page, with the 404 http status code.
  }
  return {
    props: {
      pid,
      // you may also add here the webservice content
      // to generate your page and avoid a client-side webservice call
    }
  };
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理调用 API 的 Next.js 中动态路由的未找到 404? [关闭] 的相关文章

随机推荐

  • 数组“包含”方法在 Google Apps 脚本中失败

    我试图在 Google Apps 脚本中对数组使用 includes 方法 但失败并显示 无法找到对象 1 4 3 7 中包含的函数 第 4 行 文件 test array 以下是代码 function test array var arr
  • Soundpool 还是媒体播放器?

    我正在为 Android 开发一款纸牌游戏 我希望每次投掷纸牌时都能播放投掷声音 这是同一个文件 我还会播放其他声音 例如背景音乐和某些点击声 您建议使用什么 声音池或创建 MediaPlayback 并播放它 每一个的优点 缺点是什么 我
  • 内联静态常量与静态常量变量

    我无法弄清楚哪种解决方案更好 因为我不清楚其中的区别 我想要一个包含一些可以在整个程序中自由使用的变量的文件 我的第一次尝试如下 头文件 Hosts h pragma once include
  • 从 Tkinter 框架调用函数到另一个框架

    我有一个页面 将在其中显示一些客户详细信息 因此 我创建了一个名为 客户详细信息 的页面 其中包含我需要的所有标签 并将这些标签的文本设置为变量 可惜它不起作用 标签创建于 init 方法 所以我无法 更新 它们 因为 init 仅在开始时
  • Android:如何检测assets文件夹中的目录?

    我正在检索这样的文件 String files assetFiles list EngagiaDroid 我们如何知道它是一个文件还是一个目录呢 我想循环访问资产文件夹中的目录 然后复制其所有内容 我认为更通用的解决方案 如果您有子文件夹等
  • 使用 spring-boot-admin-server 时创建名为“conversionServicePostProcessor”的 bean 时出错

    我试图为我的应用程序启用 Spring boot 管理服务器 默认设置工作得很好 但是当我尝试启用安全性时 出现以下错误 应用程序无法启动 描述 bean conversionServicePostProcessor 在类路径中定义 资源
  • 如何否定进程的返回值?

    我正在寻找一个简单但跨平台的negate 否定进程返回值的进程 它应该将 0 映射到某个值 0 并将任何值 0 映射到 0 即以下命令应返回 yes nonexistingpath 不存在 ls nonexistingpath negate
  • Python:通过变量名引用对象属性? [复制]

    这个问题在这里已经有答案了 我正在用 Python 编写棋盘游戏 大富翁 大富翁 拥有三种类型的土地供玩家购买 房产 如木板路 铁路和公用事业 房产有 6 种条件 0 4 栋房屋或酒店 的可变购买价格和租金 铁路和公用事业有固定的价格和租金
  • Alamofire 接受和内容类型 JSON

    我正在尝试在 Swift 中使用 Alamofire 发出 GET 请求 我需要设置以下标题 Content Type application json Accept application json 我可以绕过它并直接指定请求的标头 但我
  • 将数组打印到文件

    我想将数组打印到文件中 我希望该文件看起来与这样的代码完全相同 print r abc 假设 abc 是一个数组 是否有任何单行解决方案可以解决此问题 而不是每种外观都常规解决方案 P S 我目前使用序列化 但我想让文件可读 因为序列化数组
  • Object.defineProperty 获取/设置闭包

    好的 我尝试这样创建新对象 var src a a b b c c var out for var prop in src Object defineProperty out prop get function return src pro
  • 尽管网站是 HTTPS,但 WebView 显示 ERR_CLEARTEXT_NOT_PERMITTED [重复]

    这个问题在这里已经有答案了 我开始在 Android 上开发一个应用程序 所以我没有太多东西 到目前为止我所拥有的只是一个 WebView 我在 Android Studio 中创建了该项目 并将我的项目设置为 Android Instan
  • 在 php 服务器端使用meteor.js

    我开发了一个应用程序 我想使用meteor js进行实时更新 我想增强但不改变我的程序 例如当用户添加评论时使其实时更新 问题是meteor js使用node js 因此javascript作为服务器端代码 我使用 LAMP 堆栈 是否可以
  • 阻止执行上传的php文件?

    在我的项目中 允许用户上传任何类型的文件 我需要确保安全 防止执行可由 php 解析的上传文件 php html 等 有没有办法告诉apache不要在web uploads中解析任何带有php的文件并简单地将它们显示为纯文本 还有什么其他选
  • Visual Studio 2013 编辑并继续不起作用

    使用 VS2013 Pro 我在调试 MFC 程序时无法使用 编辑并继续 我新建了一个MFC项目来测试 操作系统是 Windows 7 64 位 我正在运行 Visual Studio 2013 12 0 30110 00 Update1
  • 获取当前的 jupyter-lab 笔记本名称 [适用于 Jupyter-lab 版本 2.1 和 3.0.1 以及笔记本版本 >6.0.3)

    Problem Hi all 正如我的标题所示 我想访问笔记本名称 在Jupyter实验室 作为变量 所以我可以在笔记本本身中重用它 例如 命名笔记本中生成的一些图形文件 我看到几年前就有人提出过类似的问题 看这里 然而我没有找到满意的答案
  • Rails 如何决定使用 PUT 或 POST 方法渲染表单?

    Rails 生成一个表单部分 可以在由 get 操作呈现的页面和由新操作呈现的页面上使用 如果是前者 则表单的方法设置为 PUT 如果是后者 则表单的操作设置为 POST Rails 如何决定使用哪种方法 如果传递给表单的对象是persis
  • Symfony2 - 创建自己的供应商包 - 项目和 git 策略

    我们正在考虑创建自己的common用于实体映射和服务的捆绑包 可在几个单独的应用程序中使用 捆绑包应该易于修改 运行 包含和测试 我知道关于构建捆绑包的最佳实践 但我不知道什么git开发时使用的策略 我们是否应该创建common捆绑为整个项
  • android MediaRecorder setVideoSize() 的问题

    安卓可以吗MediaRecorder捕获分辨率高于的视频320 240 当我使用MediaRecorder setVideoSize 设置视频大小 捕获的视频分辨率均为320 240 更糟糕的是 较高的无法获得清晰的视频 它们莫名其妙地呈绿
  • 如何处理调用 API 的 Next.js 中动态路由的未找到 404? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我有一个由 React 和 Next js 在客户端开发的网站 并从 Asp Net core 服务器调用 API 来获取动态数据 例如产品和类别 问题是当我请求的 URL 中有未定义的参