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;
    }
}
相关推荐
hkNaruto1 小时前
【AI】基于大模型的AI游戏地图生成、控制方案:AI Native Game Harness 迁移操作手册
前端·人工智能·游戏
IT_陈寒1 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
Acro2 小时前
快给macOS 上的Grok Bot换一套皮肤
前端
flash俊杰2 小时前
双引擎 OCR 编排:逐页判定、视觉优先、partial 语义与三层超时
前端
计算机魔术师2 小时前
Reddit 每周被 Google 偷走 100 万次点击,CEO 摊牌了
前端
前端繁华如梦2 小时前
用 React Three Fiber 做一栋能编辑的教学楼数字孪生
前端
前端繁华如梦2 小时前
用 React Three Fiber 做一套智慧医院数字孪生:编辑器、大屏和 BIM 浏览器
前端
俊昭喜喜里3 小时前
理解全局跨域CORS配置
前端
香芋芋圆4 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
晗夜未央5 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript