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

LibTV保姆级教程:从提示词到AI视频成片全流程

AI视频生成技术正以前所未有的速度重塑内容创作行业,过去需要编剧、摄影、剪辑等多角色协作的复杂流程,如今借助AI绘画与图生视频等核心能力,一个人也能完成高质量短视频制作。理解提示词工程是掌控AI视频创作的关键,通过精准描述主体、环境、光线与运镜,可以显著提升生成画面的稳定性与专业度。而图生视频技术则让静态分镜自然流动,有效解决角色一致性与场景漂移等常见问题。这类工具已广泛应用于产品宣传、剧情短片、社交媒体内容生产等场景,大幅降低了视频创作门槛。本文以LibTV一站式AI视频创作平台为例,从核心概念到完整实操

weixin_29046035的博客 992

XVF3800麦克风阵列实战:从选型到快速原型搭建

本文详细介绍了XVF3800麦克风阵列的选型与快速原型搭建实战经验。从开箱即用的特性到波束成形、回声消除等核心功能拆解,再到硬件设计避坑指南和固件开发技巧,帮助开发者高效实现智能语音设备的开发。特别适合智能音箱、会议终端等需要远场拾音和声源定位的应用场景。

weixin_29161719的博客 274

Vue —— axios的二次封装

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

Bonsoir777的博客 830

IT资产管理(三)之GLPI资产录入

glpi 在 10 版本之后已经有自带的 glpi-agent 代理程序可自动获取服务器、电脑等的信息并进行自动录入和更新,不再依赖 10 版本之前的 fusioninventory 插件或者第三方资产统计平台 OCS Inventory 等

予挚之的博客 2996

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

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

老曹的博客 7447

国产数据库PolarDB-X实战:5分钟快速搭建本地开发环境(附Docker一键部署脚本)

本文提供了一份详尽的国产分布式数据库PolarDB-X本地开发环境搭建指南。通过Docker Compose一键部署脚本,开发者可在5分钟内快速启动一个功能完整的PolarDB-X实例,涵盖环境准备、脚本解析、连接验证及日常维护,极大简化了国产数据库的入门和体验流程。

weixin_29246195的博客 360

告别抓瞎!手把手教你用Keysight Infinium和M8040完成PCIe 5.0 TX/RX信号完整性测试

本文详细介绍了如何使用Keysight Infinium示波器和M8040误码仪完成PCIe 5.0 TX/RX信号完整性测试。从测试前的设备准备、软件配置到具体的TX信号测试步骤和RX容限测试实战,提供了全面的操作指南和常见问题解决方案,帮助工程师高效完成PCIe 5.0合规性测试。

weixin_30911451的博客 504

vue2和vue3的Axios的二次封装

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

qm667的博客 1530

uniapp - 解决报错 canvasToTempFilePath: fail canvas is empty 画布为空错误,生成海报相册、二维码、条码、裁剪/拼合操作图片报错,加了this还是报错

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,canvasToTempFilePath:失败画布为空,报错,canvasToTempFilePath:failcanvasisempty,不支持2d,还是报错,this,加上this还是报错,vue3没有this怎么办?海报,保存到手机相册,生成二维码,显示条码,图像裁切,图片处理,canvas报错,无法解决,还是fail,依然报错,传了this也不好使,Uniapp小程序,如何解决这个问题

🏆 前端领域优质创作者 4714

前端vue3的axios二次封装

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

m0_61132275的博客 1254

王者荣耀AI绝悟如何选英雄?

王者荣耀AI绝悟如何选英雄? 【抢射手?抢中单位?「绝悟」在打王者荣耀时是如何选英雄的?】 腾讯 AI Lab 开发的 AI 智能体「绝悟」已让王者峡谷不再只是人类召唤师的竞技场,而且这个 AI 战队在上月底进化成了「完全体」。在一局完整的比赛中,英雄选择阶段是至关重要的(比如五射手或五法师阵容会有官方劝退)。 近日,腾讯 AI Lab 和上海交通大学发布的一篇论文介绍了绝悟的英雄选择策略:Ju...

不断学习,不断进步,提高自己 1万+

Dify 第 19 篇 手把手教你开发 Dify 插件:从零实现一个时间工具

本文介绍了Dify平台的插件开发机制和流程。Dify支持多种插件类型,包括模型、工具、数据源等,可通过CLI工具快速开发插件。文章详细讲解了如何安装Dify CLI工具,并演示了从零开发一个获取系统时间插件的完整过程,包括项目初始化、文件解读和打包部署。通过该教程,开发者可以快速掌握Dify插件开发的核心要点,实现自定义功能扩展。

甘蓝的专栏 2451

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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

qq_44539570的博客 3846

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值