Vue路由前后端设计总结

我来详细讲解一下“Vue路由前后端设计总结”的完整攻略。

一、Vue路由前后端设计总结

本文将介绍如何设计Vue项目的前后端路由,以满足不同页面、不同用户身份不同的访问权限,分为以下几个步骤。

  1. 定义路由:编写前端路由文件和后端接口文件;
  2. 路由守卫:定义全局路由守卫,并在需要的路由中添加局部路由守卫;
  3. 前后端交互:前端调用后端接口,获取用户权限信息;
  4. 权限校验:根据用户权限信息进行权限校验。

下面逐一介绍。

二、定义路由

前端路由文件:

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/Home.vue'
import Login from '@/views/Login.vue'
import Admin from '@/views/Admin.vue'
import NotFound from '@/views/NotFound.vue'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/login',
      name: 'login',
      component: Login
    },
    {
      path: '/admin',
      name: 'admin',
      component: Admin,
      meta: {
        requireAuth: true, // 需要登录权限
        requireRoles: ['admin'] // 需要admin角色权限
      }
    },
    {
      path: '*',
      name: 'notFound',
      component: NotFound
    }
  ]
})

后端接口文件:

const express = require('express')
const router = express.Router()

router.post('/api/login', (req, res) => {
  const { username, password } = req.body
  if (username === 'admin' && password === 'admin') {
    res.send({
      code: 0,
      data: {
        token: 'admin_token',
        roles: ['admin']
      },
      msg: ''
    })
  } else if (username === 'user' && password === 'user') {
    res.send({
      code: 0,
      data: {
        token: 'user_token',
        roles: ['user']
      },
      msg: ''
    })
  } else {
    res.send({
      code: 1,
      data: null,
      msg: '用户名或密码错误'
    })
  }
})

module.exports = router

三、路由守卫

全局路由守卫:

import router from '@/router'

router.beforeEach((to, from, next) => {
  if (to.meta.requireAuth) { // 需要登录权限
    const token = sessionStorage.getItem('token') // 从本地存储中获取token
    if (token) {
      next()
    } else {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    }
  } else {
    next()
  }
})

局部路由守卫:

import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState(['userInfo'])
  },
  beforeRouteEnter (to, from, next) {
    if (to.meta.requireRoles.includes(this.userInfo.role)) { // 需要角色权限
      next()
    } else {
      next('/not-found')
    }
  }
}

四、前后端交互

调用后端接口获取用户信息:

import axios from 'axios'

export const login = (username, password) => {
  return axios.post('/api/login', { username, password })
}

五、权限校验

存储用户信息并跳转页面:

import { login } from '@/api/user'
import router from '@/router'

export default {
  methods: {
    handleSubmit () {
      login(this.form.username, this.form.password).then(res => {
        const data = res.data
        if (data.code === 0) {
          sessionStorage.setItem('token', data.token)
          sessionStorage.setItem('userInfo', JSON.stringify(data))
          router.push('/')
        } else {
          this.$message.error(data.msg)
        }
      })
    }
  }
}

六、示例说明

  1. 假设用户访问/admin页面,需要管理员身份才有权限。前端定义/admin路由时,设定了requireAuthrequireRoles两个meta属性,后端定义了roles属性存储用户角色信息。全局路由守卫判断requireAuth为true时,先从sessionStorage中获取token,如果token存在,则允许访问,否则跳转至登录页。局部路由守卫判断requireRoles是否包含当前用户角色,若包含则允许访问,否则跳转至404页面。

  2. 假设用户访问/user页面,需要普通用户身份才有权限。前端定义/user路由时,设定了requireAuthrequireRoles两个meta属性,后端定义了roles属性存储用户角色信息。全局路由守卫判断requireAuth为true时,先从sessionStorage中获取token,如果token存在,则允许访问,否则跳转至登录页。局部路由守卫判断requireRoles是否包含当前用户角色,若包含则允许访问,否则跳转至404页面。

以上就是关于“Vue路由前后端设计总结”的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue路由前后端设计总结 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 在vue项目中优雅的使用SVG的方法实例详解

    让我来为你详细讲解一下在Vue项目中优雅地使用SVG的方法。 在Vue项目中优雅地使用SVG的方法 什么是SVG? SVG(Scalable Vector Graphics)是一种基于XML语法的矢量图形格式,用于描述二维图形和绘图程序。相对于传统的像素图形格式(如JPG、PNG、BMP等),SVG图像拥有无限的放大缩小比例,因此可以良好地适应各种分辨率的设…

    Vue 2023年5月28日
    00
  • Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)

    Vue.js基础指令实例讲解 Vue.js提供了许多基础指令,通过这些指令我们可以实现各种数据绑定、表单渲染等功能。本文将对Vue.js基础指令进行全面的讲解和总结。 数据绑定 数据绑定是Vue.js中最重要的一个特性,通过数据绑定,我们可以轻松地将数据显示在页面上,也可以让页面与数据保持同步。Vue中的数据绑定有以下几种方式: 插值 在HTML模板中,可以…

    Vue 2023年5月27日
    00
  • Vue自定义事件(详解)

    Vue自定义事件(详解) 什么是自定义事件 Vue中除了系统事件(如:click、change、input等),用户也可以自定义事件。自定义事件可以通过$emit来触发,在组件树中向上传递数据,被其它组件接收并响应处理。 如何使用自定义事件 在父组件中触发自定义事件 示例1:利用$emit触发自定义事件 <template> <div&gt…

    Vue 2023年5月28日
    00
  • Java 实现简单静态资源Web服务器的示例

    实现一个简单的静态资源Web服务器,可以基于Java语言编写。本文将提供一个完整的攻略,方便初学者快速上手。 1 创建项目 首先需要创建一个Java项目,可以使用Eclipse或者其他IDE。创建项目后,需要创建如下的目录结构: src ├── main │ └── java │ └── com │ └── example │ └── webserver │…

    Vue 2023年5月28日
    00
  • vue3 源码解读之 time slicing的使用方法

    Vue3 源码解读之 time slicing 的使用方法 简介 time-slicing 是一种将任务拆分为多个小任务,分散到渲染帧之间执行的技术。Vue3 在异步更新和大型列表渲染问题上 应用了 time-slicing 技术,以加快页面渲染速度。本篇文章将探讨 time-slicing 的使用方法,通过实例帮助我们理解这个 新特性。 使用方法 尽管 V…

    Vue 2023年5月29日
    00
  • 使用Webpack提升Vue.js应用程序的4种方法(翻译)

    下面我将详细讲解关于“使用Webpack提升Vue.js应用程序的4种方法”的攻略。我们先来介绍一下使用Webpack的注意事项: 在使用Webpack时,我们需要选择不同的Webpack配置文件,以适应不同的应用程序需求。此外,在使用Webpack时,合理配置各种Webpack的插件和组件也非常重要,这样可以是我们的应用程序能够正常运行,更加高效。 现在,…

    Vue 2023年5月27日
    00
  • 使用vue2.0创建的项目的步骤方法

    下面是使用Vue 2.0创建项目的步骤: 安装Vue CLI Vue CLI是Vue官方提供的脚手架工具,用于快速创建Vue项目。在终端中运行下面的命令安装Vue CLI: npm install -g @vue/cli 创建Vue项目 安装完成后运行下面的命令创建一个Vue项目: vue create my-project 其中“my-project”是项…

    Vue 2023年5月28日
    00
  • Vue实现DOM元素拖放互换位置示例

    以下是“Vue实现DOM元素拖放互换位置”示例的完整攻略: 步骤1:安装Vue和Vue-Draggable插件 首先需要在你的项目中安装Vue和Vue-Draggable插件。Vue-Draggable是一个实现可拖动DOM元素的Vue.js组件,支持多种拖动方式。 npm install –save vue npm install –save vued…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部