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中的事件修饰符介绍和示例

    当在 Vue 模板中使用事件处理函数时,我们可以添加事件修饰符,这些修饰符用来表示某个事件应该如何被处理。下面我们来详细了解 Vue 中事件修饰符的使用。 修饰符的语法 Vue中的事件修饰符通过添加点号来表示,例如: <button v-on:click.prevent="submit">Submit</button&g…

    Vue 2023年5月27日
    00
  • springboot如何使用vue打包过的页面资源

    为了方便说明,这里将“springboot如何使用vue打包过的页面资源”分为两大部分:前端资源打包和后端资源引入。下面对这两部分进行详细讲解。 一、前端资源打包 1.1 环境准备 在进行前端资源打包之前,需要先安装vue-cli和项目依赖。具体步骤如下: 安装Node.js和npm(已安装可跳过); 使用npm安装vue-cli: bash npm ins…

    Vue 2023年5月28日
    00
  • vue中使用vue-pdf的方法详解

    关于”vue中使用vue-pdf的方法详解”,以下是详细步骤: 1.安装 vue-pdf 在vue项目中,可以使用npm指令进行安装,在命令行中输入: npm install vue-pdf –save 2.配置 vue-pdf 在Vue项目中,需要在 main.js 中引入 vue-pdf 并进行全局注册: import VuePdf from ‘vue…

    Vue 2023年5月28日
    00
  • vue去掉严格开发,去掉vue-cli安装时的eslint或修改配置方式

    如果您想在vue项目中去掉严格开发模式或者去掉eslint,可以按照以下步骤进行: 去掉严格模式 在vue 3.x版本中,严格模式被默认开启。如果您想去掉严格模式,可以按照以下方式进行: 1. 修改vue.config.js配置文件 在vue.config.js配置文件中添加如下代码: module.exports = { lintOnSave: false…

    Vue 2023年5月28日
    00
  • Vue如何为GET或POST请求设置请求头

    要为Vue的GET或POST请求设置请求头,需要使用Vue提供的Axios库来发送HTTP请求。Axios是一个简单易用的基于Promise的HTTP库。可以使用Axios来添加自定义请求头信息。以下是详细讲解“Vue如何为GET或POST请求设置请求头”的完整攻略。 添加全局请求头 要在所有Axios请求中添加相同的请求头,可以使用Axios提供的defa…

    Vue 2023年5月28日
    00
  • iview实现动态表单和自定义验证时间段重叠

    iView是一款基于Vue.js的UI框架,可以快速搭建美观、易用的网页应用程序。在iView中实现动态表单和自定义验证时间段重叠的功能,需要深入了解iView的表单组件和验证组件。 实现动态表单 在iView中,通过<Form :model=”formData”>和<FormItem>标签可以构建表单。动态表单的实现需要以下步骤: …

    Vue 2023年5月29日
    00
  • vue中this.$refs.name.offsetHeight获取不到值问题

    问题背景: 在vue开发中,有时候我们需要获取某个元素或者组件的高度值,利用this.$refs.name.offsetHeight是个非常简便的方式,但是它并不总是奏效,许多开发者在这种情况下却无法获取到对应的高度值,究竟是为什么呢? 解决方案: 经过笔者的实践和总结,出现这种问题的情况大多是因为元素或组件还没有被渲染到Dom树上,因此高度值无法获取。针对…

    Vue 2023年5月29日
    00
  • 基于Vue.js与WordPress Rest API构建单页应用详解

    那么让我为你详细讲解“基于Vue.js与WordPress Rest API构建单页应用详解”的完整攻略。 概述 本文将介绍如何使用Vue.js和WordPress Rest API构建单页应用。使用Vue.js和WordPress Rest API结合,可以轻松快速的创建现代化的单页应用。Vue.js是一个用于构建用户界面的JavaScript框架,而Wo…

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