当前位置: 首页 > news >正文

Axios 封装网络请求

1 简介

通过Axios的请求拦截器和响应拦截器实现登录拦截,参数封装。
注意:前提是你的vue已经安装了Axios。
附安装代码:

npm install axios 

2 封装代码

2.1 utils文件夹下创建 request.js

// 网络请求方法
import axios from 'axios'
import router from '@/router'// 自定义axios对象  (ajax对象就是axios)
const ajax = axios.create({baseURL: 'http://请求IP地址:端口/api', // 服务器基地址headers: {'Content-Type': 'application/json; charset=utf-8'},timeout: 10000
})// 添加请求拦截器,判断token是否过期
// 请求拦截器
// 设置axios请求头加入token
ajax.interceptors.request.use(config => {// 判断是否有token(是否已经登录),不是请求token,就对请求添加tokenif (localStorage.getItem('token') && config.url !== 'admin/auth/token') {//在请求头加入token,名字要和后端接收请求头的token名字一样config.headers.authorization = localStorage.getItem('token')}// 根据请求方法自动选择传递参数的方式// get delete 传递params参数// post,put,patch 传递data参数if (config.method === 'post' || config.method === 'put' || config.method === 'patch') {config.data = config.params}return config},error => {return Promise.reject(error)})// 响应拦截器
ajax.interceptors.response.use(response => {// 判断是否登录成功if (response.data.code === 0) {console.log(response.data.msg || '请求出错,稍后重试')}return response.data},error => {// Token过期,请求响应 401 时,用户手动获取token,强制跳转登录页面if (error.response && error.response.status === 401) {//清除tokenlocalStorage.removeItem('token')console.log('登录失效,请重新登录')//跳转router.push('/login')} else {console.log('服务器连接异常')}return Promise.reject(error)})export default ajax  // 导出一个axios函数

2.2 api文件夹下创建index.js
请求的统一出口。

// 登录为例,获取token,获取账户信息
import {recommendToken, authInfo} from './login'export default {recommendToken,authInfo
}

2.3 api文件夹下创建login.js
存放所有的登录请求

// 封装发起的请求
import request from '@/utils/request'// 封装网络请求方法
export const recommendToken = params => request({url: 'admin/auth/token',method: 'POST',params
})export const authInfo = param => request({url: 'admin/auth/AuthInfo',method: 'GET',param
})

3 使用

api.recommendToken({userName: this.username,password: this.password
}).then(res => {// 请求数据处理const token = res.data.accessToken// 存储tokenlocalStorage.setItem('token', 'Bearer ' + token)// 跳转到首页this.$router.push('/')
}).catch(error => {// 错误捕获console.log('服务器错误:' + error.message)
}).finally(() => {})api.authInfo().then(res => {// 请求完成后逻辑……
}).catch(error => {// 错误捕获console.log(error)
})

http://www.mrgr.cn/news/34148.html

相关文章:

  • MySQL技巧之跨服务器数据查询:基础篇-动态参数
  • Request和Response
  • 调整TCP参数, 优化网络性能
  • 基于Java+SpringBoot+Vue前后端分离电影院管理系统
  • 知名开源项目官宣停更,太痛了!
  • 【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?
  • 【教学类-52-11】20240919动物数独(4宫格)1图、2图、6图、有答案、无答案 组合版18套
  • 外包干了4年,技术退步太明显了。。。。。
  • 防火墙详解(一) 网络防火墙简介
  • 导致mfc140u.dll,无法继续执行代码的原因分析及解决方法
  • 数据安全治理
  • 华为防火墙配置双机热备
  • netstat 命令:网络监控
  • 发票查验API接口是什么?发票查验接口用python demo示例如何集成
  • hCaptcha 图像识别 API 对接说明
  • 【Go】Go语言切片(Slice)深度剖析与应用实战
  • 三边法定位与三点法定位 辨析
  • [arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面
  • Qt 窗口类的继承关系和作用
  • 【C++】类与对象(上篇)
  • Qt --- 常用控件的介绍 --- 其他控件
  • C#和数据库高级:抽象类和抽象方法
  • 成功案例|大模型备案全网最详细办理流程
  • TypeScript-面向对象(接口、类、对象、泛型)
  • Docker使用指南
  • 计量校准中测量溯源性是什么?已校准设备要怎么处理?