Vue路由前后端设计总结

yizhihongxing

我来详细讲解一下“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中的过滤器实例代码详解

    Vue中的过滤器(Filter)是Vue.js提供的一个函数,我们可以通过使用它来对数据进行简单的处理和转化,从而更方便地显示在视图中。本文主要是为初学者介绍Vue中的过滤器使用方法,并提供了一些实例代码帮助读者更深入地理解。 一、Vue过滤器的语法及使用方法 Vue的过滤器可以作为一个函数被添加到模板表达式的尾部,由竖线 (|) 操作符指示。它接受表达式的…

    Vue 2023年5月27日
    00
  • vue使用pdf.js预览pdf文件的方法

    下面是“Vue使用PDF.js预览PDF文件的方法”的完整攻略。 步骤一:安装PDF.js库 首先,我们需要在我们的Vue项目中安装pdfjs-dist依赖: npm install pdfjs-dist –save 步骤二:加载PDF.js文件 在我们的Vue组件中,加载PDF.js文件: <template> <div> &lt…

    Vue 2023年5月28日
    00
  • Vue生命周期函数调用详解

    Vue生命周期函数调用详解 Vue的生命周期函数是Vue组件在实例化、更新、销毁等关键时刻自动执行的函数,我们可以通过实现这些函数来执行一些必要的逻辑操作。在开发Vue应用时,了解地址这些生命周期函数的调用顺序及其用途非常重要。本文将深入探讨Vue的生命周期函数,帮助大家更好地掌握Vue的使用技巧。 Vue生命周期函数分类 Vue中的生命周期函数分为四类: …

    Vue 2023年5月28日
    00
  • vue+axios全局添加请求头和参数操作

    下面是详细讲解“vue+axios全局添加请求头和参数操作”的完整攻略。 1. 添加全局请求头 1.1 在 Vue 项目中安装 Axios 在 Vue 项目中使用 Axios 首先需要安装 Axios。可以通过以下命令安装: npm i axios -S 1.2 声明 Axios 在 Vue 项目中创建一个 axios.js 文件,然后声明 Axios 并设…

    Vue 2023年5月28日
    00
  • vue计算属性及使用详解

    Vue计算属性及使用详解 在Vue中,有一种非常有用的概念:计算属性。在本篇文章中,我将详细解释Vue计算属性的概念及其使用方法,并给出一些示例说明。 什么是Vue计算属性? 计算属性本质上是一个函数,它可以监听Vue实例中的数据变化,并根据数据的变化返回一个新的计算结果。我们使用计算属性来简化Vue模板中复杂的计算逻辑,提高代码的可读性和可维护性。 计算属…

    Vue 2023年5月28日
    00
  • 如何测量vue应用运行时的性能

    下面就为大家介绍如何测量Vue应用运行时的性能。 1.为什么测量Vue应用的性能 在开发Vue应用时,为了确保用户体验和性能,需要对应用进行性能优化。因此,我们需要知道如何测量Vue应用的性能,以便确定何时需要进行优化。 2.测量方式 2.1 使用Vue开发者工具 Vue开发者工具是一个非常强大的Chrome扩展程序,可以帮助我们更好地调试和优化Vue应用。…

    Vue 2023年5月27日
    00
  • VUE +Element 实现多个字段值拼接功能

    下面是关于“VUE +Element 实现多个字段值拼接功能”的完整攻略: 1. 确认需求 在进行编码前,我们需要先明确要实现的功能。根据需求,我们需要实现一个多个字段值拼接的功能,要求: 用户可以选择要拼接的字段; 拼接后的结果应该可以复制到剪贴板中; 支持对拼接字段的顺序进行调整。 2. 安装 Element 接下来,我们需要安装 Element。在 V…

    Vue 2023年5月29日
    00
  • Vue实例中生命周期created和mounted的区别详解

    当我们在Vue中创建一个实例时,它会先到生命周期中的created函数,然后再到mounted函数。这两个生命周期函数对于我们开发Vue应用程序非常重要,因为它们可以帮助我们在特定的时间点注入特定的代码。 1. created生命周期函数 created生命周期函数是在Vue实例中最早执行的函数,它在实例被创建之后立即调用。在这个时候,Vue实例上的属性和方…

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