Vue项目实战中对token和axios的二次封装使用

简介: token通常在管理系统中用来进行身份和权限验证,大家应该都不陌生,这篇文章教大家对token和axios进行封装,保持项目结构良好的可读性,对token比较陌生的同学,那就赶紧学起来吧~

前言

token通常在管理系统中用来进行身份和权限验证,大家应该都不陌生,这篇文章教大家对token和axios进行封装,保持项目结构良好的可读性,对token比较陌生的同学,那就赶紧学起来吧~

什么是token

token是对用户进行登录验证的一串密钥,它由后端生成,一般前端进行登录验证通过后就会得到后端返回过来的token,后期的一些操作请求也需要携带token来保证接口安全

token身份验证的过程

  1. 前端发送登录请求
  2. 请求成功,拿到token,存入本地localstorage中
  3. 发送请求携带token,后端验证token返回结果
  4. 退出登录,销毁token

token 的封装

上面叙述了token的验证过程,那么对于token我们需要先把他存储到本地,然后每次请求携带token,最后退出登录需要销毁token。所以需要三个方法分别是:存储,拿到,销毁
对于这三种方法,为了方便使用,我们对其进行封装
一般建立utils文件夹存放一些工具方法,在里面新建token.js文件

export function setToken(tokenKey, token) { // 将token存入localStorage
    return localStorage.setItem(tokenKey, token)
}

export function getToken(tokenKey) {    //拿到localStorage中的token
    return localStorage.getItem(tokenKey)
}

export function removeToken(tokenKey) {  //退出登录时调用销毁token
    return localStorage.removeItem(tokenKey)
}

这样一来,我们在使用token相关的方法就可以直接调用了,也方便后期维护修改
对于token方法的调用,我们一般封装在拦截器当中,继续往下看

axios的二次封装

在根目录新建一个名为service.js的文件,用来写相关的服务拦截器
导入axios和刚刚写好的token文件中的getoken方法
然后创建一个service,在里面配置对应的baseURL为 /api,timeout就是请求超过多长时间就停止
这里的baseURL为 /api的原因说一下:因为我这个项目在vue.config.js文件中设置了代理为/api处理跨域,必须相同才能找到我对应设置的api路径。这个文件跨域处理在链接文章中有讲-—》Vue前端处理跨域问题

import axios from 'axios'
import { getToken } from './utils/token'
import { Message } from 'element-ui'

const service = axios.create({
    baseURL: '/api',
    timeout: 3000
})

请求拦截器

先写请求拦截器,顾名思义,就是在发送请求前我们需要做的事,比如将存在本地的token拿到,并且携带它发送请求。接着上面的写代码
下面方法是axios的固定写法,config.headers设置请求头,也就是这里需要在请求头中携带token给后端进行验证

service.interceptors.request.use((config) => {
    // 在发送前做些什么
    // 获取并设置token
    // console.log(getToken('token'))
    config.headers['token'] = getToken('token')
    return config
}, (error) => {
    return Promise.reject(error)
})

响应拦截器

响应拦截器就是对后端返回的响应数据做一些事,比如这里对状态码进行判断,如果不为200,就使用Message的弹窗进行对应的提示,这样处理在项目所有的请求中都能实现结果提示,避免每次请求都重复写代码。

service.interceptors.response.use((response) => {
    // 对响应数据做些什么
    let { status, message } = response.data
    if (status !== 200) {
        Message({type: 'warning', message: message || 'error'})
    }
    return response
}, (error) => {
    // 对响应错误做点什么
    return Promise.reject(error)
})

export default service

这里对axios进行二次封装,方便在请求前和响应后做出对应的操作,最后别忘了在main.js中进行全局的配置

import service from './service'
Vue.prototype.service = service
相关文章
|
4月前
|
JavaScript 前端开发 Java
vue2知识点:Vue封装的过度与动画
vue2知识点:Vue封装的过度与动画
31 0
|
4月前
|
前端开发 JavaScript 安全
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
278 4
|
4月前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
380 59
|
4月前
|
Web App开发 JavaScript 数据可视化
vue3扩展echart封装为组件库-快速复用
vue3扩展echart封装为组件库-快速复用
228 7
|
4月前
|
缓存 JavaScript 搜索推荐
|
4月前
|
资源调度 JavaScript
|
4月前
|
JavaScript API 开发工具
vue尚品汇商城项目-day02【11.对axios二次封装+12.接口统一管理】
vue尚品汇商城项目-day02【11.对axios二次封装+12.接口统一管理】
50 0
|
8天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
8天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。

热门文章

最新文章