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;
    }
}
相关推荐
abigale031 小时前
webpack+vite前端构建工具 -11实战中的配置技巧
前端·webpack·node.js
专注API从业者2 小时前
构建淘宝评论监控系统:API 接口开发与实时数据采集教程
大数据·前端·数据库·oracle
Joker`s smile2 小时前
Chrome安装老版本、不同版本,自制便携版本用于前端调试
前端·chrome
weixin_416639972 小时前
爬虫工程师Chrome开发者工具简单介绍
前端·chrome·爬虫
我是如子啊2 小时前
【解决“此扩展可能损坏”】Edge浏览器(chrome系列通杀))扩展损坏?一招保留数据快速修复
前端·chrome·edge
灵性花火2 小时前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt
孤水寒月6 小时前
基于HTML的悬窗可拖动记事本
前端·css·html
祝余呀6 小时前
html初学者第一天
前端·html
脑袋大大的7 小时前
JavaScript 性能优化实战:减少 DOM 操作引发的重排与重绘
开发语言·javascript·性能优化
速易达网络8 小时前
RuoYi、Vue CLI 和 uni-app 结合构建跨端全家桶方案
javascript·vue.js·低代码