Vue3刷新页面报错404的解决方法

 更新时间:2022年04月21日 09:38:55   作者:SpongeBob  
本文主要介绍了Vue3刷新页面报错404的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

vue-router历史模式

最近在学习Vue3的过程中遇到了一个问题,那就是在写代码的过程中,每当代码发生了变动,页面一刷新,原先的页面就会变成这个样子:

打开控制台一看:

这时候刷新、在浏览器地址栏直接输入地址也不管用。 每次写一点代码,都不能及时看到结果,需要从8080重新进入才可以,其中的崩溃可想而知。 此时判断应该是路由跳转的问题,于是来到router.js文件看一看:

import {
  createRouter,
  createWebHistory
} from 'vue-router'
// import Home from '../views/Home.vue'

const Home = () => import('../views/home/Home');
const Category = () => import('../views/category/Category');
const Detail = () => import('../views/detail/Detail');
const Profile = () => import('../views/profile/Profile');
const Shopcart = () => import('../views/shopcart/Shopcart');


const routes = [{
    path: '/home',
    name: 'Home',
    component: Home,
    meta: {
      title: '图书兄弟'
    }
  },
  {
    path: '/',
    name: 'Default',
    component: Home,
    meta: {
      title: '图书兄弟'
    }
  },
  {
    path: '/category',
    name: 'Category',
    component: Category,
    meta: {
      title: '商品分类'
    }
  },
  {
    path: '/detail',
    name: 'Detail',
    component: Detail,
    meta: {
      title: '商品详情'
    }
  },

  {
    path: '/profile',
    name: 'Profile',
    component: Profile,
    meta: {
      title: '个人中心'
    }
  },
  {
    path: '/shopcart',
    name: 'Shopcart',
    component: Shopcart,
    meta: {
      title: '购物车'
    }
  },
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})


router.beforeEach((to, from, next) => {

  // 如果没有登录,到login
  next();
  document.title = to.meta.title;
})

export default router

感觉没啥问题,仔细检查了自己写的代码部分,没有发现问题,于是更纳闷了,难道是自动生成的代码出现了问题? 经过一翻排查,发现原来是vue-router历史模式的问题: vue3中历史模式默认改为了HTML5模式:createWebHistory()

当使用这种历史模式时,URL 会看起来很 "正常",例如 https://example.com/user/id。 不过,问题来了。由于我们的应用是一个单页的客户端应用,如果没有适当的服务器配置,用户在浏览器中直接访问 https://example.com/user/id,就会得到一个 404 错误。 这就是一直折磨我的罪魁祸首!

Vue-router官方给出的解决方案是:

要解决这个问题,你需要做的就是在你的服务器上添加一个简单的回退路由。如果 URL 不匹配任何静态资源,它应提供与你的应用程序中的 index.html 相同的页面。

这涉及到服务器的配置,由于我的项目还在开发阶段,所以这种解决方式暂时不能用。所幸还有其他的解决方案,那就是将历史模式由当前的HTML5模式改为Hash模式:

import { createRouter, createWebHashHistory } from 'vue-router'

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    //...
  ],
})

表现在代码上就是两个createWebHistory换成了createWebHashHistory,这样就完成了修改。

修改完成后重新启动项目:

npm run serve

此时刷新页面也不会报404了,大功告成!

详细解决方法请移步vue-router官网“不同的历史记录模式”部分: router.vuejs.org/zh/guide/essentials/history-mode.html

到此这篇关于Vue3刷新页面报错404的解决方法的文章就介绍到这了,更多相关Vue3刷新页面报错404内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中路由参数传递可能会遇到的坑

    vue中路由参数传递可能会遇到的坑

    这篇文章主要给大家介绍了关于vue中路由参数传递遇到的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • 浅谈vue的几种绑定变量的值 防止其改变的方法

    浅谈vue的几种绑定变量的值 防止其改变的方法

    下面小编就为大家分享一篇浅谈vue的几种绑定变量的值 防止其改变的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • el-descriptions引入代码中label不生效问题及解决

    el-descriptions引入代码中label不生效问题及解决

    这篇文章主要介绍了el-descriptions引入代码中label不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • vue3 座位选座矩阵布局的实现方法(可点击选中拖拽调换位置)

    vue3 座位选座矩阵布局的实现方法(可点击选中拖拽调换位置)

    由于公司项目需求需要做一个线上设置考场相关的座位布局用于给学生考机排号考试,实现教室考场座位布局的矩阵布局,可点击选中标记是否有座无座拖拽调换位置横向纵向排列,本文给大家分享实现代码,一起看看吧
    2023-11-11
  • Vue关于数据绑定出错解决办法

    Vue关于数据绑定出错解决办法

    这篇文章主要介绍了Vue关于数据绑定出错解决办法的相关资料,需要的朋友可以参考下
    2017-05-05
  • Vuex状态机的快速了解与实例应用

    Vuex状态机的快速了解与实例应用

    Vuex是专门为Vuejs应用程序设计的状态管理工具,这篇文章主要给大家介绍了关于Vuex状态机快速了解与实例应用的相关资料,需要的朋友可以参考下
    2021-06-06
  • Vue指令工作原理实现方法

    Vue指令工作原理实现方法

    自定义指令是 vue 中使用频率仅次于组件,其包含 bind 、 inserted 、 update 、 componentUpdated 、 unbind 五个生命周期钩子,接下来通过本文给大家详细介绍Vue指令工作原理实现方法,需要的朋友参考下吧
    2021-06-06
  • 详解vue中属性执行顺序

    详解vue中属性执行顺序

    这篇文章主要介绍了vue中属性执行顺序,选项的执行顺序是 props -> data -> computed -> watch -> created -> mounted -> methods,具体详细内容本文给大家讲解的非常详细,需要的朋友可以参考下
    2023-09-09
  • Element-UI Table组件上添加列拖拽效果实现方法

    Element-UI Table组件上添加列拖拽效果实现方法

    这篇文章主要为大家详细介绍了Element-UI Table组件上添加列拖拽效果的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • element-ui循环显示radio控件信息的方法

    element-ui循环显示radio控件信息的方法

    今天小编就为大家分享一篇element-ui循环显示radio控件信息的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08

最新评论