Axios 封装网络请求

1 简介

通过Axios的请求拦截器和响应拦截器实现登录拦截,参数封装。

注意:前提是你的vue已经安装了Axios。

附安装代码:

bash 复制代码
npm install axios 

2 封装代码

2.1 utils文件夹下创建 request.js

javascript 复制代码
// 网络请求方法
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 => {
        // 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

请求的统一出口。

javascript 复制代码
// 登录为例,获取token,获取账户信息
import {recommendToken, authInfo} from './login'

export default {
    recommendToken,
    authInfo
}

2.3 api文件夹下创建login.js

存放所有的登录请求

javascript 复制代码
// 封装发起的请求
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 使用

javascript 复制代码
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)
})
相关推荐
sdghterhd2 小时前
WebSocket 快速入门教程(附示例源码)
网络·websocket·网络协议
xy34533 小时前
Wireshark捕获过滤器——语法元素详解
网络·测试工具·渗透测试·wireshark
DLYSB_4 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
德福危险5 小时前
富有想象力的XSS盲打:靶机练习之Tempus_fugit5
服务器·网络·xss
哥是强混6 小时前
Means:基于 .NET 10 打造的开源自部署 S3 兼容对象存储服务
网络·数据库·.net
Piko6147 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
爱研究的小梁9 小时前
乾元通多链路聚合通信主流落地应用案例
网络·信息与通信
Bobolink_9 小时前
跨境网络丢包优化实践,从5%到0.2%的排查与调整过程
网络·跨境网络·丢包优化
Piko6149 小时前
锐捷交换机 DHCP Server部署
运维·网络·笔记
多巴胺梦想家10 小时前
数据库恢复技术:当灾难来临
网络·数据库·oracle