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

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,就对请求添加token
        if (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 => {
            if (error.code === 'ECONNABORTED'){
            console.log('服务器连接中断')
            router.replace('/login')
            return Promise.reject(error)
        }
        // Token过期,请求响应 401 时,用户手动获取token,强制跳转登录页面
        if (error.response && error.response.status === 401) {
            //清除token
            localStorage.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
  // 存储token
  localStorage.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.kler.cn/news/322154.html

相关文章:

  • 总结拓展十一:S4 HANA和ECC区别
  • 进阶 RocketMQ - 消息存储-一张图掌握核心要点
  • 数字化转型:开启未来发展新引擎
  • Vue可视化大屏模板
  • 服务器的地址如何伪装起来
  • Spring Boot 学习之路 -- 基础认知
  • 触发器对象
  • 计算机的历史,你可知道?
  • 连接池和长连接的区别和优缺点
  • 【VUE】状态管理:Pinia组件、Cookie组件
  • 基于单片机巡迹避障智能小车系统
  • 缓存与数据库如何保持一致及MySQL和Redis的使用场景以及区别
  • 1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)
  • Animal objDog = new Dog()和 Dog objDog = new Dog()的区别
  • nodejs - puppeteer 无头浏览器截图 JAVA后端调用
  • 如何在iPad上设置Chrome为默认浏览器
  • TFT-LCD显示屏(1.8寸 STM32)
  • 【PostgreSQL教程】PostgreSQL 特别篇之 常用函数
  • C++基础知识:C++中读文件的四种简单方式
  • CKKS同态加密通用函数近似方法和openFHE实现
  • Unity角色控制及Animator动画切换如走跑跳攻击
  • 如何通过费曼技巧理解复杂主题
  • 操作系统 概论
  • 【Vue.js基础】
  • idea上使用tomcat运行web项目
  • 李宏毅2023机器学习作业HW07解析和代码分享
  • 0-1开发自己的obsidian plugin DAY 4
  • 解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!
  • MySQL GROUP BY 分区大小写问题解析
  • 简明linux系统编程--互斥锁--TCP--UDP初识