vue axios二次封装

为什么需要进行二次封装axios? 阅读详情

携带token+取消重复请求

import axios from 'axios'
import qs from 'qs'
import {Message, Loading} from 'element-ui'//element ui库
import store from "../store/index.js";//vuex
axios.defaults.timeout = window.g.AXIOS_TIMEOUT;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
axios.defaults.baseURL =window.g.baseURL;
//取消请求
let CancelToken = axios.CancelToken
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
    // 携带token
    const token = store.state.token
    console.log(store.state)
     if (token) {
         config.headers.Authorization = token
     }
        // 得到请求的 url地址
        let url=config.url
        // 判断,如果这里拿到的 url在上一次请求中已经存在,就取消上一次的请求
        if (url) {
            if (axios[url] && axios[url].cancel) {
                axios[url].cancel()
            }
            config.cancelToken = new CancelToken(c => {
                axios[url] = {}
                axios[url].cancel = c
            })
        }
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response;
}, function (err) {
  // 对响应错误做点什么,这里其他情况和消息提示根据需要自己安排
            switch (err.response.status) {
            case 401: // 判断后台返回的token值是否失效
                Message.closeAll();
                Message({
                message: "登录信息过期,即将跳转登录界面",
                type: 'error',
                showClose: true,
                duration: 2 * 1000
                })
                // router.replace({ path: '/' });
                setTimeout(() => {
                window.location.href = '/login'
                }, 1000);
                break
            case 404:
                // err.request.responseURL + err.message
                Message.closeAll();
                Message({
                message:"请求接口地址错误"+ err.response.request.responseURL,
                type: 'error',
                showClose: true,
                duration: 2 * 1000
                })
                error.message = err.message;
                error.details = err.response.data.error.details;
                break
            case 500:
            Message.closeAll();
                Message({
                message: err.response.data.message,
                type: 'error',
                showClose: true,
                duration: 2 * 1000
                })
                break
                case 502:
                Message.closeAll();
                Message({
                message: "接口异常",
                type: 'error',
                showClose: true,
                duration: 2 * 1000
                })
                break
            default:
            }
  return Promise.reject(err);
});
export default {
    posts(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, params)
                .then(response => {
                    resolve(response.data);
                }, err => {
                    reject(err);
                })
                .catch((error) => {
                    reject(error)
                })
        })
    },
    gets(url, params) {
        return new Promise((resolve, reject) => {
            axios.get(url, { 'params': params })
                .then(response => {
                    resolve(response.data);
                }, err => {
                    reject(err);
                })
                .catch((error) => {
                    reject(error)
                })
        })
    },
    deletes(url, params) {
        return new Promise((resolve, reject) => {
            axios.delete(url, { 'params': params })
                .then(response => {
                    resolve(response.data);
                }, err => {
                    reject(err);
                })
                .catch((error) => {
                    reject(error)
                })
        })
    },
    puts(url, params) {
        return new Promise((resolve, reject) => {
            axios.put(url, params)
                .then(response => {
                    resolve(response.data);
                }, err => {
                    reject(err);
                })
                .catch((error) => {
                    reject(error)
                })
        })
    },
    logins(url, params) {//登录
        var instance = axios.create({
            baseURL: window.g.baseURL
        });
        instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
        
        return new Promise((resolve, reject) => {
            instance.post(url, params)
                .then(response => {
                    resolve(response.data);
                }, err => {
                    reject(err);
                })
                .catch((error) => {1
                    reject(error)
                })
        })
    },
    loadImg(url, params) { //上传图片
        var dataParams = new FormData()
        for (const i in params) {
            dataParams.append(i,params[i])
        }
        var instance = axios.create({
            baseURL: window.g.baseURL,
        });
        instance.defaults.headers.post['Content-Type'] = 'multipart/form-data';
        // console.log(axios.defaults.headers)
        return new Promise((resolve, reject) => {
            instance.post(url, dataParams)
                .then(response => {
                    resolve(response.data);
                }, err => {
                    reject(err);
                })
                .catch((error) => {
                    reject(error)
                })
        })
    },

}
Vue——axios的二次封装 阅读详情

相关推荐

Vue使用axios二次封装、解决跨域问题

在项目中,axios 进行二次封装可以更加方便的使用 Ajax 请求,提高代码复用性和维护性。同时可以封装统一的请求与响应拦截处理。在实际开发过程中,浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后,官方推荐使用axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。

pan_junbiao的博客 2638

关于axios二次封装

简要说明二次封装axios的好处,以及一个简单的封装

G104305的博客 907

axios 二次封装及 api 解耦【Vue】

axios 基础知识、axios 在 vue 中的二次封装及 api 解耦。

m0_52861684的博客 1809

【vue2小知识】实现axios的二次封装

VUE中axios的二次封装。第一次封装设置基地址与拦截器。第二次封装根据业务模块进行接口的分离

嗨,朋友你好!我是前端领域的工作者 6450

2025.06.25【微生物】|Emu工具安装与使用详解:全长16S扩增子微生物丰度分析

Emu是一款基于贝叶斯方法的微生物多样性分析工具,专为处理高错误率的长读长16S/18S扩增子数据优化。本文详细介绍了Emu的安装与使用方法:1)通过conda创建独立环境并安装Emu;2)提供SILVA等预构建数据库的下载指南,并说明自定义数据库的构建方法;3)演示单样本和多样本分析流程,解读关键输出文件;4)介绍丰度表合并、分类等级汇总等实用功能扩展;5)建议后续分析方向。文章还附有官方GitHub链接和相关文献资源,为微生物群落结构研究提供了一套完整的分析解决方案。

1256

RealSense D435i深度相机实战:从像素坐标到三维空间的精准映射(Python实现)

本文详细介绍了使用RealSense D435i深度相机实现从二维像素坐标到三维空间坐标精准映射的两种Python实战方法:深度图反投影法与点云直接查找法。文章涵盖环境搭建、相机对齐、代码实现、性能对比及与YOLO等检测模型结合的进阶应用,并提供了关键的避坑指南和参数调优建议,帮助开发者在机器人、三维重建等项目中高效应用。

weixin_29291573的博客 382

Vue —— axios的二次封装

本文主要介绍如何对 axios 进行二次封装

Bonsoir777的博客 830

【Android】条形码/二维码扫描——ZXing源码分析

正在更新中 针对3.2.1版本源码 与其他版本代码可能会有出入,但核心思想基本不变。 首先从com.google.zxing.client.android包中的目录结构分析:Book:这个文件夹中有5个类: BrowseBookListener 实现了adapter的点击事项响应,通过获取ISBN,然后跳转到Google books中查询响应的详细信息。 SearchBookContents

年轻的学徒 2453

在Vue项目中对Axios进行二次封装

1.前言 Web开发中,我们最常用的HTTP库就是Axios了,它的底层基于Ajax进行封装,在浏览器端和服务端都可以使用。如果大家对一些API不是很熟悉可以参考官方地址,或者中文社区。虽然现在网上已经有很多基于Axios封装的文章了,但是不妨碍我来接受社区大佬的“棒打”。 2.涉及到的业务场景 多环境:开发、测试、生产环境。 统一错误处理:401、404、500等错误。 断网、请求超时处理。 请求取消/请求拦截:防止重复请求发送到服务端,造成服务端压力。 请求权限:某些接口必须要有登录状态才可以访问。.

老曹的博客 7447

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 478

【Unity】【VR】如何让Distance Grab抓取物品时限制物品的Rotation

VR中Canvas抓取旋转问题的解决方案 在VR应用中,Canvas作为UI面板常需被抓取拖动,但默认会随手柄产生Z轴旋转,导致UI歪斜。Unity的Rigidbody冻结旋转功能对此无效,因为XR抓取直接修改Transform而非物理模拟。

每日出拳老爷子的博客 611

vue2和vue3的Axios的二次封装

二次封装带来的优势可能的进一步优化方向推荐的最佳实践和注意事项。

qm667的博客 1530

ppt保存时嵌入字体,但找不到字体使用的位置的解决办法

摘要 当PPT提示无法保存嵌入字体时,可通过VBA代码快速定位使用该字体的文本。具体步骤如下: 按ALT+F11打开VBA编辑器,新建模块并粘贴提供的代码; 运行代码后输入目标字体名称(如“方正兰亭黑简体”); 程序将列出所有使用该字体的幻灯片编号及对应文本内容; 修改这些文本的字体即可解决保存问题。该方法高效精准,适用于排查PPT字体嵌入失败的情况。(150字)

智慧空间实验室 1403

前端vue3的axios二次封装

默认情况下,Vite 在 vite/client.d.ts 中为 import.meta.env 提供了类型定义。随着在 .env[mode] 文件中自定义了越来越多的环境变量,你可能想要在代码中获取这些以 VITE_ 为前缀的用户自定义环境变量的 TypeScript 智能提示。在前端开发中,常见的环境包括 development(开发环境)和 production(生产环境)。地址可以放置到环境变量中,在vue3+vite+ts的项目中,创建env文件如下。内容没有问题后就是如何动态更换请求的URL。

m0_61132275的博客 1254

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Vue中axios的二次封装

Vue项目中,前端与服务器进行数据交互主要用axios比较多,原生的axios发送请求处理数据不太友好,项目中可以二次开发自定义。 什么是 axios? Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 axios的特性 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API 拦截...

程序员小潘 6419

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Vue中如何对Axios进行二次封装

作为一个前端开发者,你一定对Axios这个强大的HTTP库非常熟悉。它不仅简化了与后端API的通信,而且还提供了许多强大的功能,如拦截器、取消请求等。但是在实际开发中,我们经常需要对Axios进行二次封装,以便更好地适应我们的业务需求。

有我更精彩的博客 1477

vue项目中对axios进行二次封装

在进行vue项目开发的时候,对axios进行二次封装和对api接口进行模块化的管理

qq_44539570的博客 3846

vue中axios的二次封装——vue 封装axios详细步骤

通常我们的项目会越做越大,页面也会越来越多,如果页面非常的少,直接用axios也没有什么大的影响,那页面组件多了起来,上百个接口呢,这个时候后端改了接口,多加了一个参数什么的呢?那就只有找到那个页面,进去修改,整个过程很繁琐,不易于项目的维护和迭代。这个时候如果我们统一的区管理接口,需要修改某一个接口的时候直接在api里修改对应的请求,是不是很方便呢?因为我们用的最多的还是get post请求,我们就可以针对封装。

Vivien_CC的博客 3万+

Vue开发问题——axios二次封装,请求、响应拦截器。

关于Vue开发的问题(axios封装) 在博客中查找vue的axios封装,发现其中案例还是很多的,自己项目中有些需求不够,比如application请求头、请求方式,以及其他问题,做了些修改。做个记录 首先放出引用的源代码 vue axios 封装 全局调用axios 感谢 爱吃排骨 给予的帮助 import axios from "axios" import qs from "qs" axios.defaults.timeout=3000 //响应时间 axios.defaults.headers.

Lazy33的博客 9061

vue对axios进行二次封装

在Vue中,对Axios进行二次封装可以提高代码的可重用性和可维护性。通过封装,我们可以将请求的配置、错误处理和拦截器等逻辑集中到一个地方,方便后续的修改和扩展。此外,封装Axios还可以简化代码,减少重复的请求配置,提高开发效率。因此,对Axios进行二次封装是Vue开发中一个非常实用的技巧。

qq_54421200的博客 1365

vue 请求axios二次封装

vue 请求axios二次封装配置网络请求的通用项对接口请求失败、异常的统一处理封装axios完整的代码文件 配置网络请求的通用项 我们通常会遇到一些业务:例如 接口请求的超时时间、header等。在axios中,提供了request拦截器.我们在对应的回调函数中根据相应的业务做处理即可。 import axios from 'axios' axios.interceptors.request...

weixin_43876684的博客 1176

Vue中axios请求二次封装

特性mian.js引入并挂载到Vue实例中 2.1二次封装axios请求 在scr目录下新建utils文件夹,并在utils文件夹下新建request.js 2.2创建API请求 在src目录下新建api文件夹,并在此文件夹下新建index.js Vue页面使用

Web_chicken的博客 2000
下一篇: vue+vscode eslint配置自动修复
起风了咦
博客等级 码龄7年 2粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值