vue开发中关于axios的封装过程
作者:前端@小菜 发布时间:2024-04-30 10:40:24
标签:vue,axios,封装
关于axios的封装
下面代码参考了 vue-element-admin 中的封装方式,request.js 文件如下,封装一个 axios 实例:
import axios from 'axios'
import { BASE_URL } from './http'
import router from '../router'
?
// create an axios instance
const service = axios.create({
? baseURL: BASE_URL, // url = base url + request url
? withCredentials: true, // send cookies when cross-domain requests(是否支持跨域)
? timeout: 5000 // request timeout(超时时间)
})
?
// request interceptor(请求 * )
service.interceptors.request.use(
? config => {
? ? // do something before request is sent
? ? return config
? },
? error => {
? ? // do something with request error
? ? // console.log(error) // for debug
? ? return Promise.reject(error)
? }
)
?
// response interceptor(响应 * )
service.interceptors.response.use(
? response => {
? ? const res = response.data
? ? return res
? },
? error => {
? ? if (error.response) {
? ? ? // console.log('err' + error) // for debug
? ? ? switch (error.response.status) {
? ? ? ? // 不同状态码下执行不同操作
? ? ? ? case 401:
? ? ? ? ? router.push('/login')
? ? ? ? ? break
? ? ? ? case 404:
? ? ? ? ? break
? ? ? ? case 500:
? ? ? ? ? break
? ? ? ? default:
? ? ? }
? ? }
? ? return Promise.reject(error)
? }
)
?
export default service
封装 api:
import request from '../base/request'
?
export function basedata(params) {
? return request({
? ? url: '/user/basedata',
? ? method: 'GET',
? ? params
? })
}
这里参数用的 params,它是拼接在 url 中的。还有一个参数 data,传递的数据格式为对象。
import request from '../base/request'
?
export function basedata(data) {
? return request({
? ? url: '/user/basedata',
? ? method: 'POST',
? ? data
? })
}
然后我们就只需引入封装好的 api 进行调用即可。
另外,如果请求超时需要自动重新获取数据,可参考我的另一篇文章:解决 axios: “timeout of 5000ms exceeded”超时的问题
vue中axios全局封装
axios封装
import axios from 'axios'
import Qs from 'qs'
import VueCookies from 'vue-cookies';
// const {set, get, isKey } = VueCookies
// const AUTH_TOKEN = 1
const axiosInstance = axios.create({
? ? baseURL: '域名',
? ? headers: {
? ? ? ? // 'Authorization': AUTH_TOKEN,
? ? ? ? 'Content-Type': 'application/x-www-form-urlencoded'
? ? },
? ? transformRequest: [function(data, headers) {
? ? ? ? if (headers['Content-Type'].includes('application/x-www-form-urlencoded')) {
? ? ? ? ? ? if (data instanceof(FormData || URLSearchParams)) return data;
? ? ? ? ? ? else return Qs.stringify(data);
? ? ? ? } else if (headers['Content-Type'].includes('application/json')) return JSON.stringify(data)
? ? }]
})
export default axiosInstance
axiosInstance.interceptors.request.use(function(config) {
? ? // 在发送请求之前做些什么
? ? if (VueCookies.isKey('Authorization')) {
? ? ? ? config.headers.Authorization = VueCookies.get('Authorization')
? ? }
? ? return config;
}, function(error) {
? ? // 对请求错误做些什么
? ? return Promise.reject(error);
});
// 添加响应 *
axiosInstance.interceptors.response.use(function(response) {
? ? // 2xx 范围内的状态码都会触发该函数。
? ? // 对响应数据做点什么
? ? return response.data
}, function(error) {
? ? // 超出 2xx 范围的状态码都会触发该函数。
? ? // 对响应错误做点什么
? ? return Promise.reject(error);
});
api的统一管理
import axiosInstance from "../axios";
export function EmailCode(data) {
? ? return axiosInstance({
? ? ? ? method: 'post',
? ? ? ? url: 'url',
? ? ? ? headers: {
? ? ? ? ? ? 'smskey': 'smskey'
? ? ? ? },
? ? ? ? data
? ? })
}
export function userRegister(data) {
? ? return axiosInstance({
? ? ? ? method: 'post',
? ? ? ? url: 'url',
? ? ? ? data
? ? })
}
export function userLogin(data) {
? ? return axiosInstance({
? ? ? ? method: 'post',
? ? ? ? url: 'url',
? ? ? ? data
? ? })
}
来源:https://blog.csdn.net/qq_39025670/article/details/103095823


猜你喜欢
- 上一篇介绍了 HTML5 中 Canvas 的基本概念,这篇将要介绍一下 Canvas&n
- 本文以Python3.8为例1、 compileall py文件转换为pyc1.1、compileall命令行模式不需要额外安装,pytho
- 对于比较长的数字组成的字符串,我们一般会用逗号(,)隔开来格式化数字,从右往左每三个数字用一个逗号分组隔开。为什么要用逗号隔开数字呢?因为当
- 本文实例为大家分享了python SMTP发送带附件电子邮件的具体代码,供大家参考,具体内容如下可采用email模块发送电子邮件附件。发送一
- 简介:type() 函数可以对数据的类型进行判定。isinstance() 与 type() 区别:type() 不会认为子类是一种父类类型
- 方式一在Python的SQLAlchemy ORM中,您可以使用以下代码动态地更改数据模型类的表名:from sqlalchemy.ext.
- 在GUI程序中,主线程也叫GUI线程,因为它是唯一被允许执行GUI相关操作的线程。对于一些耗时的操作,如果放在主线程中,就是出现界面无法响应
- 插值对于一些时间序列的问题可能比较有用。Show the code directly:import numpy as npfrom matp
- mysql存储引擎:MySQL服务器采用了模块化风格,各部分之间保持相对独立,尤其体现在存储架构上。存储引擎负责管理数据存储,以及MySQL
- 小孩子刚刚开始学说话的时候,常常是一个字一个字地开始学,比如学说“饺子”,对他/她来讲,似乎有点难度,大人也聪明,于是就简化了,用“饺饺”来
- 本文实例讲述了python实现给微信公众号发送消息的方法。分享给大家供大家参考,具体如下:现在通过发微信公众号信息来做消息通知和告警已经很普
- 目录问题复现隐式转换总结参考问题在工作中发现,有一个接口只执行一条SQL查询语句,并且SQL明明使用了主键列,但是速度很慢。在MySQL中E
- 本文介绍了多个 Python IDE,并评价其优缺点。读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器。写 Pyth
- 前言这篇文章主要记录一下平时自己实践得到的, 博客中学习的以及在一些项目源码中看到的 javascript 技巧。有些东西可以说是奇淫技巧,
- 前言SQL SERVER 2012中新增了IIF函数,这个函数在VB或是ACCESS中是存在的。感兴趣的朋友们下面来一起学习学习吧。格式如下
- pip的安装,以及使用pip安装包的方法,记录如下,分享给大家:—–安装python的时候勾选了下载pip,不知道为什么没下载。然后就偷懒想
- python使用socket创建tcp服务器和客户端。服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复。客户端,等待用户输入
- 本文详细分析了smarty缓存的用法。分享给大家供大家参考。具体分析如下:一开始以为smarty只是用来做一些掩饰php代码功能,但是后来才
- 查看系统原有Python注:可以将python指向python3,但必须修改一些命令如yum的配置,不然会报错。安装依赖yum instal
- Python中的字符串对象是不能更改的,也即直接修改字符串中的某一位或几位字符是实现不了的,即python中字符串对象不可更改,但字符串对象