如何解决单页应用部署后浏览器刷新出现 404 的问题

如何解决单页应用部署后浏览器刷新出现 404 的问题?

单页应用(Single-Page Application,SPA)是一种流行的 Web 应用程序设计模式。SPA 具有如下特征:只有一个 HTML 页面;页面的所有资源都是通过 AJAX 加载的;用户与应用程序交互时不会刷新整个页面,只会局部刷新。

但是,当我们使用单页应用部署在服务器上后,刷新网页时却发现浏览器出现了 404 错误。这是因为单页应用只有一个主页,其他所有页面都是通过 JavaScript 动态获取的,而这些动态生成的页面对应的 URL 地址在服务器端并不存在,导致了浏览器无法找到对应的资源而出现 404 错误。

那么,如何解决这个问题呢?以下是两种方法:

1. 使用后端路由

可以在后端使用路由来处理前端的所有请求,这样刷新页面时就可以匹配到真实的路由,从而解决 404 错误。

以 Node.js 为例,使用 Express 框架实现后端路由:

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

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

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

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

上述代码中,express.static 中间件定义了静态文件目录,将静态文件暴露给公共目录。而 app.get 定义了前端路由的所有请求都返回 index.html 页面。

2. 使用 Hash 路由

可以使用 Hash 路由实现刷新页面不出现 404 错误。Hash 路由是将路由映射到 URL 的 Hash 中(即 URL 中的 # 号后的部分),这样即使刷新页面,浏览器也只是重新加载 index.html 页面,而不会向服务器发送请求,因此不会出现 404 错误。

以 Vue.js 为例,使用 Hash 路由:

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

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

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

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

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

上述代码中,VueRouter 路由对象定义了两个路由://about。而 mode 属性设置为 Hash 模式,这样所有路由都将映射到 URL 的 Hash 中。

结论

以上就是解决单页应用部署后浏览器刷新出现 404 的两种方法:使用后端路由或使用 Hash 路由。使用后端路由需要在服务器端配置路由,比较麻烦。而使用 Hash 路由相对简单,需要注意的是路由模式需要设置成 Hash。在实际开发中,可以根据项目需求选择最适合的方式。

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