📜  Vue JS 生产模式刷新导致 404 错误 - Javascript (1)

📅  最后修改于: 2023-12-03 15:35:38.296000             🧑  作者: Mango

Vue JS 生产模式刷新导致 404 错误 - Javascript

当我们使用Vue.js进行开发时,如果在开发环境中刷新页面,页面可以正常加载,但在生产环境中刷新页面,则可能会遇到404错误。这是因为在生产环境中,Vue.js使用的是路由的History模式,而在History模式下,服务器会返回404错误。本文将介绍如何解决这个问题。

原因

Vue.js使用的是前端路由,即在前端控制URL的变化,从而实现SPA(单页应用)。在开发环境下,Vue.js使用的是hash模式的路由,即URL中带有"#"符号,如下所示:

http://localhost:8080/#/home

而在生产环境下,Vue.js使用的是History模式的路由,即URL中不带有"#"符号,如下所示:

http://example.com/home

当我们在开发环境下刷新页面时,由于URL中带有"#"符号,浏览器会直接跳转到该URL,而不会向服务器发送请求。而在生产环境下,由于URL中不带有"#"符号,浏览器会向服务器发送请求,但由于服务器上并没有该页面的实际文件,因此会返回404错误。

解决方法

解决这个问题的方法有几种,下面介绍其中两种常用的方法:

1. 配置服务器

在服务器上配置一个fallback路由,即无论请求哪个页面,都返回主页的HTML文件。这样,在请求一个无效页面时,虽然服务器会返回404错误,但浏览器会收到主页的HTML文件,并按照该文件中的路由配置跳转到正确的页面。

在Nginx服务器上的配置如下所示:

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;

    # fallback路由,所有请求都返回index.html文件
    location / {
        try_files $uri $uri/ /index.html;
    }
}

此时,在请求一个不存在的页面时,服务器会返回404错误,但浏览器会跳转到正确的页面并显示正确的内容。

2. 使用Hash模式

在Vue.js的路由配置中,使用Hash模式的路由,即在生产环境中也使用带有"#"符号的URL。在Vue.js的路由配置中加入如下代码即可:

const router = new VueRouter({
    mode: 'hash',
    routes: [...]
})

这样,在生产环境中刷新页面时,浏览器会直接跳转到对应的路由,不会向服务器发送请求。

结论

由于Vue.js默认使用的是History模式的路由,在生产环境中刷新页面会导致404错误。解决这个问题的方法有许多,上述两种方法是比较常用的方法。具体采用哪种方法,取决于开发者个人的喜好和实际情况。