axios请求封装

这篇具有很好参考价值的文章主要介绍了axios请求封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简单封装

  1. 封装get请求

function ajax_get(url,params={}){
    return new Promise(resolve => {
        axios.get(url,{
            params
        }).then(r=>{
            console.log(r.data);
            resolve(r.data)
        })
    })
}

var getBanner = () => ajax_get(baseUrl + "/banner")

var getGoodList = data => ajax_get(baseUrl + "/goodList",data)

2.封装post请求

function ajax_post(url,params={}){
    return new Promise(resolve => {
        axios.post(url,params).then(r=>{
            resolve(r.data)
        })
    })
}

将需封装好的请求export导出

export {
    getBanner,
    getGoodList
}

二、高级封装

1.配置axios

// http.js 这个文件是对axios请求插件的二次封装, 有的请求需要携带token,、可以把token携带的操作放在请求拦截的函数,也就是在发请求时候,先经过请求拦截追加token发给服务器,也可以对服务器响应进行进行优化再返回给客户端 可以设置请求的服务器地址,也可以设置超时时间等。
import axios from "axios"; // 导入原始的请求插件

// 有些post接口无法解析对象类型的请求参数, 可以使用qs模块(node内置模块)把对象类型的数据序列化为查询字符串结构 {name:lisi, age:10} ===> ?name=lisi&age=10
import qs from "qs"

// 请求数据时,展示请求的加载框, 使用element-plus组件库的加载组件
import { ElLoading } from 'element-plus'
let loading = null;


// 功能1 根据环境设置axios发起不同的服务器请求地址, 设置后,发起ajax请求不再拼接基础路径
if(process.env.NODE_ENV == "development"){
    axios.defaults.baseURL = "/cige"  // 开发环境的代理路径
}else if(process.env.NODE_ENV == "production"){
    axios.defaults.baseURL = "https://lianghj.top:8888/api/private/v1"  // 生产环境的原始路径 (项目打包时用这个路径)
}

//功能2 添加超时功能 设置超时时间, 请求超过30秒无响应就判定请求失败
axios.defaults.timeout = 30000 //30s

// 功能3 是否允许跨域请求携带Cookie, 前端设置了该属性为true时,后端需要设置Access-Control-Allow-Origin为前端项目的源地址,不可设置为*;
axios.defaults.withCredentials = true 

// 功能4 在请求头设置(post)请求内容的编码格式
axios.defaults.headers["Content-Type"]="application/x-www-form-urlencoded"

// 功能5 把请求的参数由对象结构转化为查询字符串结构,  转换通过qs第三方进行转换  data就是请求参数
axios.defaults.transformRequest = data =>qs.stringify(data)

// 功能6 axios请求拦截 在发请求之前 对请求进行处理 一般把本地token添加到请求头里面执行登录认证, 这样在发请求时就不用考虑并处理token了
axios.interceptors.request.use(request=>{
    // 请求时开始加载, target参数指定加载框显示的区域
    if(!loading) loading = ElLoading.service({target:".refresh_box"})  
    // console.log("axios请求拦截",request); // config参数是请求的配置信息
    let token = sessionStorage.getItem("token") //从本地取出token
    // 登录授权 请求验证是否有token  需要授权的 API ,必须在请求头中使用 `Authorization` 字段提供 `token` 令牌(具体字段由服务器后台定义)
    token && (request.headers.Authorization=token)
    return request
},error=>{
    return Promise.reject(error) // 返回错误
})

// 功能7 axios的响应拦截, 可在这里对响应数据或响应头做处理
axios.interceptors.response.use(response=>{
    if(loading) {      // 响应时结束加载
        loading.close();  
        loading = null;
    }
    // axios响应数据会封装到一层data字段中, 把data字段剥开,返回原始响应
    return response.data 
},error=>{
    return Promise.reject(error)
})

// 功能8 显示请求时的加载框, 见请求拦截和响应拦截

// 最后,返回配置之后的axios
export default axios
  1. 封装请求文章来源地址https://www.toymoban.com/news/detail-620135.html

// 导入我二次封装的请求插件
import http from "./http"

// 登录
const postLogin = params => http.post('/login', params);

// 左侧菜单列表
const getMenus = () => http.get("/menus");

// 获取用户列表
const getUsers = params => http.get("/users", { params });

// 修改用户状态
const putUserState = params => http.put(`/users/${params.uId}/state/${params.type}`);

// 添加用户
const postAddUser = params => http.post("/users", params);

// 编辑用户信息
const putUserInfo = params => http.put(`/users/${params.id}`, params);

// 删除单个用户
const deleteUser = params => http.delete(`/users/${params.id}`);

// 分配用户角色
const putUserRole = params => http.put(`/users/${params.uid}/role`,params);

// 获取角色列表
const getRoles = () => http.get("/roles");

// 添加角色
const postAddRole = params => http.post('/roles', params);

// 编辑角色信息
const putRolesInfo = params => http.put(`/roles/${params.id}`, params);

// 删除角色
const deleteRoles = params => http.delete(`/roles/${params.id}`);

// 所有权限列表
const getRights = params => http.get(`/rights/${params.type}`);

// 删除角色指定权限
const deleteRightForRole = params => http.delete(`/roles/${params.roleId}/rights/${params.rightId}`);


// 图片上传地址
const uploadUrl = http.defaults.baseURL + "/upload";

// 图片上传 
const postImg = formData => http({
    url: "/upload",
    method: "post",
    headers: { 
        // 文件上传的请求头需要设置数据类型multipart/form-data
        "Content-Type" : "multipart/form-data"
    },
    // 注意: 请求体中使文件数据, 不是对象, 不需要(qs)处理请求体
    transformRequest: data => data,
    data: formData  // 文件数据要放到formData对象中
})

export{
    .....
}

到了这里,关于axios请求封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3【使用axios并封装axios请求】

    第一步:安装axios 第二步:编写请求文件 新建request.js 简单的axios封装,里面相关提示信息,自己可以引入element-plus去添加

    2024年02月04日
    浏览(42)
  • 使用ts封装一个Axios请求

    下面是一个简单的 TypeScript 版本的封装 Axios 请求的例子,基于 Axios 0.21.1 版本: 在这个示例中,我们首先定义了一个通用的响应结构 ApiResponse,用来包装 API 返回的数据,包括状态码、数据和消息等信息。然后,我们创建了一个 Axios 实例,定义了请求和响应拦截器,以及封装

    2024年02月16日
    浏览(35)
  • Vue3+Axios网络请求封装

    本文将详细介绍一款基于Axios+Typescript封装的网络请求库,该库可以自动携带token、拦截请求和响应等操作,并能够处理请求重复、超时和错误状态码等异常情况。 Axios 是基于Node.js的HTTP客户端,也是一款广泛使用的网络请求库。它具有使用简单、可扩展性高、易用性好等特点

    2024年02月07日
    浏览(29)
  • 封装axios请求重试和路由切换时请求取消

    请求重试函数:这里注意两个变量__retryCount 和retry分别代表当前次数和重试次数。如果请求中没有配置retry则正常进行不会进行重试。 请求取消我这里的场景是路由切换时,将上次路由全部取消也可以配置部分取消。注意变量noCancel,他来控制那些不需要被取消。 回顾axios请

    2024年02月21日
    浏览(33)
  • Vue3的axios请求封装,请求拦截,相应拦截

    对于三者放在Service.js中封装,方便使用 axios.create  的作用是创建一个新的  axios  实例,该实例可以具有自定义配置。通过使用  axios.create ,您可以为任何 API 生成一个客户端,并在使用同一客户端的任何调用中重复使用相同的配置。这使得在应用程序中使用多个 API 时更加

    2024年02月03日
    浏览(26)
  • html+Vue+封装axios实现发送请求

    在html中使用Vue和Axios时,可以在HTML中引入Vue库和Axios库,然后使用Vue的语法和指令来创建Vue组件和模板。在Vue组件中,你可以使用Axios发送HTTP请求来获取数据,并将数据绑定到Vue模板中进行展示。 这段代码在HTML中使用了Vue,使用axios并设置了请求拦截器和响应拦截器。它实现

    2024年02月13日
    浏览(41)
  • ts + axios + useRequest (ahooks)—— 实现请求封装

    现在越来越多的项目开始ts化,我们今天就一块学习一下,关于ts的请求封装。 首先要安装两个依赖: npm i axios -S npm i ahooks -S 引入: 定义一个泛型接口,用于指定请求参数和响应数据的类型 使用ahooks的useRequest: 直接使用get、post:

    2024年02月13日
    浏览(38)
  • axios全局封装取消请求,你可以创建一个 Axios 实例,并为该实例配置默认的 CancelToken

    可以在你的应用中使用这个封装过的 Axios 实例,并通过调用 instance.cancelAll() 方法来取消所有未完成的请求。

    2024年02月04日
    浏览(36)
  • 前端进阶:Axios request 封装深入教程

    国企offer求比较 国企offer求比较 互联网VS国企央企,形势似乎又有新变化 腾讯网易米哈游,各游戏厂面试真题大公开 12月校招补录开启,职能大类岗位12.29已更新 12月校招补录开启,软开、IT信息大类岗位12.29已更新 中证登/中国结算深分体检后续 寒假别摆了,求个小老师。

    2024年02月20日
    浏览(45)
  • 关于前端开发中常用的 axios 封装

    前端、axios、网络请求 关于前端开发中常用的 axios 封装 jcLee95 的个人博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/131099244 相关文章:[《flutter 中的 dio 模块用法解析与二次封装》](https://blog.csdn.net

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包