解决 Express.js 中的 404 Not Found 错误

在使用 Express.js 构建 Web 应用程序时,经常会遇到 404 Not Found 错误。这个错误通常是由于请求的资源不存在或路由定义不正确导致的。本文将介绍如何解决这个问题,并提供示例代码。

原因分析

当 Express.js 应用程序收到一个请求时,它会按照预定义的路由规则查找匹配的路由。如果找不到匹配的路由,就会返回 404 Not Found 错误。

以下是一些常见的导致 404 Not Found 错误的原因:

  • 路径错误:请求的路径与路由定义不匹配。
  • 资源不存在:请求的资源不存在,例如请求一个不存在的文件或数据库记录。
  • 中间件错误:中间件可能会导致路由无法匹配,例如通过错误的条件过滤请求。

解决方法

检查路由定义

首先,需要检查路由定义是否正确。检查路由路径和 HTTP 方法是否正确。例如,以下路由定义只匹配 GET 请求和路径为 /users 的请求:

----------------- ----- ---- -- -
  -------------- -------
---

如果请求的路径不是 /users 或请求的方法不是 GET,就会返回 404 Not Found 错误。因此,需要确保路由定义与请求匹配。

处理资源不存在

如果请求的资源不存在,可以返回一个自定义的错误页面或 JSON 响应。以下是一个返回 JSON 响应的示例:

--------------------- ----- ---- -- -
  ----- ------ - --------------
  ----- ---- - --------------------
  -- ------- -
    ------ ---------------------- ------ ----- --- ------ ---
  -
  ---------------
---

在这个示例中,如果请求的用户不存在,就会返回一个包含错误消息的 JSON 响应。

处理中间件错误

如果中间件导致路由无法匹配,可以使用 Express.js 的错误处理中间件来处理错误。以下是一个处理路由不存在错误的示例:

------------- ---- ----- -- -
  ----- --- - --- ---------- --------
  ---------- - ----
  ----------
---

------------- ---- ---- ----- -- -
  --------------------- -- -----
  ---------------- - - -------------
---

在这个示例中,第一个中间件会将错误传递给下一个中间件,第二个中间件会根据错误的状态码返回一个错误消息。

总结

在 Express.js 中解决 404 Not Found 错误需要检查路由定义、处理资源不存在和处理中间件错误。通过理解这些技术,可以更好地构建可靠的 Web 应用程序。

示例代码:

----- ------- - -------------------
----- --- - ----------

----------------- ----- ---- -- -
  -------------- -------
---

--------------------- ----- ---- -- -
  ----- ------ - --------------
  ----- ---- - --------------------
  -- ------- -
    ------ ---------------------- ------ ----- --- ------ ---
  -
  ---------------
---

------------- ---- ----- -- -
  ----- --- - --- ---------- --------
  ---------- - ----
  ----------
---

------------- ---- ---- ----- -- -
  --------------------- -- -----
  ---------------- - - -------------
---

---------------- -- -- -
  ------------------- ------- -- ---- -------
---

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65d1b7e3add4f0e0ffa57156