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;
    }
}
相关推荐
敲代码的玉米C3 分钟前
测试一直在写你的真实数据根
前端·人工智能·架构
执子念的飞鱼26 分钟前
File Viewer 进入 2K 节点后,我更在意这 3 条回归
前端·typescript
richdata28 分钟前
动态OTB vs 静态OTB:鞋服零售该选哪种管理模式?
前端·html·零售
Jodie同志30 分钟前
第16~23天:持久化、HITL、流式、MCP与安全
前端·后端·agent
Jodie同志35 分钟前
第1~15天:原生Agent、RAG与LangGraph基础(完整代码实操)
前端·后端·agent
sunly_37 分钟前
React useActionState 的用法详解
前端·javascript·react.js
今日无bug38 分钟前
RESTful + Interface:从 todos 项目理解后端接口设计
前端·restful
用户69371750013841 小时前
#DeepSeek+Pi‑Agent 王炸组合跑赢 Claude‑Code!
前端·人工智能·后端
前端一课1 小时前
我还在上班,怎么做一个长期有价值的号
前端
前端一课1 小时前
用 TRAE Work 把项目踩坑经验沉淀成「团队可复用工程规范」,新人再也不重复掉坑
前端·后端