vue 后台管理 之 axios使用及接口拦截响应等

开心是一天,不开心也是一天

文章目录

  • [一、 什么是axios?](#一、 什么是axios?)
  • [二、使用 axios](#二、使用 axios)
  • 三、拦截器的使用
  • [四、二次封装 get / post 等请求](#四、二次封装 get / post 等请求)

一、 什么是axios?

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

网址: https://www.javasoho.com/axios/index.html#axios-request-config

二、使用 axios

1. 安装

javascript 复制代码
npm install axios

2. 定义

  • 这是定义的一个简易版 js 文件,把 axios 引入进来
javascript 复制代码
import axios from "axios"

const service = axios.create({
    baseURL:import.meta.env.VITE_APP_BASE_API,
})

// 添加请求拦截器
service.interceptors.request.use(function (config) {
    // 成功的请求前
    return config;

  }, function (error) {
    // 请求错误前
    return Promise.reject(error);

  });



// 添加响应拦截器
service.interceptors.response.use(function (response) {
    // 响应成功前
    return response;
  }, function (error) {
    // 响应错误前
    return Promise.reject(error);

 })


export default service
  • 使用 get / post 等请求
javascript 复制代码
import axios from "~/axios" // 更改axios文件路径嗷
export function getConfig(){
    return axios.get(`/admin/distribution_setting/get`)
}

export function setConfig(data){
    return axios.post(`/admin/distribution_setting/set`,data)
}

三、拦截器的使用

  • 为了方便处理数据,在接口请求前后我们会做一些操作处理
  • 比如在接口请求前,会使用请求拦截器 在每个header 头添加token
  • 在接口响应后,会使用响应拦截器 对响应数据处理一下再返回

四、二次封装 get / post 等请求

默认情况下,axios将JavaScript对象序列化为JSON。 要以application / x-www-form-urlencoded格式发送数据,可以使用 qs 库转换,使用前需要安装 qs

javascript 复制代码
import axios from "axios"
import QS from 'qs';

const $get = (url, params) => {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params,
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}


const $post = (url, params) => {
    return new Promise((resolve, reject) => {
       // QS.stringify(params) 是将对象 序列化成URL的形式,以&进行拼接
        axios.post(url, QS.stringify(params)) 
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
// Post2 数据格式不用转化,且可以指定头部信息
const $post2 = (url, params, type) => {
    return new Promise((resolve, reject) => {
        axios.post(url, params, type)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
//下面是vue3必须加的,vue2不需要,只需要暴露出去get,post方法就可以
export default {
    install: (app) => {
        app.config.globalProperties['$get'] = $get;
        app.config.globalProperties['$post'] = $post;
        app.config.globalProperties['$post2'] = $post2;
        app.config.globalProperties['$axios'] = axios;
    }
}
相关推荐
xump15 分钟前
如何在DevTools选中调试一个实时交互才能显示的元素样式
前端·javascript·css
折翅嘀皇虫16 分钟前
fastdds.type_propagation 详解
java·服务器·前端
Front_Yue17 分钟前
深入探究跨域请求及其解决方案
前端·javascript
wordbaby18 分钟前
React Native 进阶实战:基于 Server-Driven UI 的动态表单架构设计
前端·react native·react.js
抱琴_19 分钟前
【Vue3】我用 Vue 封装了个 ECharts Hooks,同事看了直接拿去复用
前端·vue.js
风止何安啊21 分钟前
JS 里的 “变量租房记”:闭包是咋把变量 “扣” 下来的?
前端·javascript·node.js
老华带你飞23 分钟前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
Danny_FD26 分钟前
用 ECharts markLine 标注节假日
前端·echarts
程序员西西27 分钟前
SpringBoot无感刷新Token实战指南
java·开发语言·前端·后端·计算机·程序员
烛阴27 分钟前
Luban集成CocosCreator完整教程
前端·typescript·cocos creator