vue3 axios安装及使用

vue3 axios安装及使用vue3axios 安装及使用安装使用 npm 安装 npminstallax 封装 axios Author Axios 封装 Date 2020 12 0810 39 03 LastEditTime 2021 10 2211 34 08 LastEditors PleasesetLas Description InUserSettin FilePath blogs s src api

vue3 axios安装及使用

安装

使用npm安装

$ npm install axios 

封装axios

/* * @Author: Axios封装 * @Date: 2020-12-08 10:39:03 * @LastEditTime: 2021-10-22 11:34:08 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \blogs-s\src\api\index.ts */ import axios from 'axios'; import qs from "qs"; import store from "@/store/index"; import router from '@/router/index'; import { 
    dataList } from '@/components/aspin/data'; import { 
    message } from 'ant-design-vue'; import { 
    storage } from '../storage/storage'; //数据请求字符 axios.defaults.baseURL = process.env.VUE_APP_API_URL, // 如果请求话费了超过 `timeout` 的时间,请求将被中断 axios.defaults.timeout = 5000; // 表示跨域请求时是否需要使用凭证 axios.defaults.withCredentials = false; // axios.defaults.headers.common['token'] = AUTH_TOKEN axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'; // 允许跨域 axios.defaults.headers.post["Access-Control-Allow-Origin-Type"] = "*"; // 请求拦截器 axios.interceptors.request.use(function (config) { 
    if ( config.method === "post" || config.method === "put" || config.method === "delete" ) { 
    // qs序列化 config.data = qs.parse(config.data); } // 若是有做鉴权token , 就给头部带上token if (storage.get(store.state.Roles)) { 
    store.state.Roles config.headers.Authorization = storage.get(store.state.Roles); } return config; }, error => { 
    message.error(error.data.error.message); return Promise.reject(error.data.error.message); }) // 响应拦截器 axios.interceptors.response.use(function (config) { 
    dataList.show = true if (config.status === 200 || config.status === 204) { 
    setTimeout(() => { 
    dataList.show = false }, 400) return Promise.resolve(config); } else { 
    return Promise.reject(config); } }, function (error) { 
    if (error.response.status) { 
    switch (error.response.status) { 
    case 400: message.error("发出的请求有错误,服务器没有进行新建或修改数据的操作==>" + error.response.status) break; // 401: 未登录 // 未登录则跳转登录页面,并携带当前页面的路径 // 在登录成功后返回当前页面,这一步需要在登录页操作。  case 401: //重定向 message.error("token:登录失效==>" + error.response.status + ":" + store.state.Roles) storage.remove(store.state.Roles) storage.get(store.state.Roles) router.replace({ 
    path: '/Login', }); break; // 403 token过期 // 登录过期对用户进行提示 // 清除本地token和清空vuex中token对象 // 跳转登录页面  case 403: message.error("用户得到授权,但是访问是被禁止的==>" + error.response.status) break; case 404: message.error("网络请求不存在==>" + error.response.status) break; case 406: message.error("请求的格式不可得==>" + error.response.status) break; case 410: message.error("请求的资源被永久删除,且不会再得到的==>" + error.response.status) break; case 422: message.error("当创建一个对象时,发生一个验证错误==>" + error.response.status) break; case 500: message.error("服务器发生错误,请检查服务器==>" + error.response.status) break; case 502: message.error("网关错误==>" + error.response.status) break; case 503: message.error("服务不可用,服务器暂时过载或维护==>" + error.response.status) break; case 504: message.error("网关超时==>" + error.response.status) break; default: message.error("其他错误错误==>" + error.response.status) } return Promise.reject(error.response); } else { 
    // 处理断网的情况 // eg:请求超时或断网时,更新state的network状态 // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏 // 关于断网组件中的刷新重新获取数据,会在断网组件中说明 store.commit('changeNetwork', false); } } ) export default axios 

main.ts:

全局使用
import axios from './utils/http/axios' 全局使用 // 全局ctx(this) 上挂载 $axios app.config.globalProperties.$api = axios 
封装使用
/* * @Author: your name * @Date: 2021-05-08 11:33:56 * @LastEditTime: 2021-10-22 10:36:05 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \blogs-s\src\api\article.js */ import request from '@/utils/http/axios' import { 
    IntArticle } from "@/api/data/interData"; export class article { 
    / * @description: 查询总条数 */ static async GetCountAsync() { 
    return await request({ 
    url: "/api/SnArticle/GetCountAsync", method: 'get', }) } / * @description: 查询分类总条数 * @param {number} id */ static async ConutSort(id: number) { 
    return await request({ 
    url: "/api/SnArticle/GetConutSortAsync?type=" + id + "&cache=true", method: 'get', }) } / * @description: 模糊查询 * @param {string} name */ static async GetContainsAsync(name: string) { 
    return await request({ 
    url: "/api/SnArticle/GetContainsAsync?name=" + name + "&cache=true", method: 'get', }) } / * @description: 按标签模糊查询 * @param {string} name */ static async GetTypeContainsAsync(tag: string, name: string, chache: boolean) { 
    return await request({ 
    url: "/api/SnArticle/GetTypeContainsAsync?type=" + tag + "&name=" + name + "&cache=" + chache, method: 'get', }) } / * @description: 主键查询 * @param {number} id * @param {boolean} cache * @return {*} */ static async GetByIdAsync(id: any, cache: boolean): Promise<any> { 
    return await request({ 
    url: "/api/SnArticle/GetByIdAsync?id=" + id + "&cache=" + cache, method: 'get', }) } / * @description: 按标签条件查询 * @param {number} id * @param {boolean} cache * @return {*} */ static async GetTagtextAsync(id: number, cache: boolean): Promise<any> { 
    return await request({ 
    url: "/api/SnArticle/GetTagAsync?labelId=" + id + "&isDesc=true&cache=" + cache, method: 'get', }) } / * @description: 标签分页查询 * @param {number} page * @param {number} pagesize * @return {*} */ static async GetFyTitleAsync(page: number, pagesize: number, isDesc: boolean, cache: boolean): Promise<any> { 
    return await request({ 
    url: "/api/SnArticle/GetFyTitleAsync?" + "&pageIndex=" + page + "&pageSize=" + pagesize + "&isDesc=" + isDesc + "&cache=" + cache, method: 'get', }) } / * @description: 分类分页查询 * @param {number} page * @param {number} pagesize */ static async GetFySortTitleAsync(page: number, pagesize: number, cache: boolean): Promise<any> { 
    return await request({ 
    url: "/api/SnArticle/GetfySortTestAsync?type=7&pageIndex=" + page + "&pageSize=" + pagesize + "&isDesc=true&cache=" + cache, method: 'get', }) } / * @description: 更新 * @param {any} resultData * @param {string} type */ static async UpdatePortionAsync(resultData: any, type: string): Promise<any> { 
    return await request({ 
    // 更新 url: "/api/SnArticle/UpdatePortionAsync?type=" + type, method: "put", data: resultData, }) } / * @description: 新增数据 * @param {any} resultData */ static async AddAsync(resultData: IntArticle) { 
    return await request({ 
    url: "/api/SnArticle/AddAsync", method: "post", data: resultData, }) } / * @description: 更新数据 * @param {IntArticle} resultData */ static async UpdateAsync(resultData: IntArticle) { 
    return await request({ 
    url: "/api/SnArticle/UpdateAsync", method: "put", data: resultData, }) } / * @description: 删除 * @param {number} id * @return {*} */ static async DeleteAsync(id: number) { 
    return await request({ 
    url: "/api/SnArticle/DeleteAsync?id=" + id, method: "delete", }) } } 

axios 并发请求

处理并发请求的助手函数

axios.all(iterable)

axios.spread(callback)

//示例: import { 
    article } from '@/api/index'; import { 
    blogsList } from "./components/data"; import axios from '@/utils/http/axios' class methods { 
    static async GetFySortTitle() { 
    await article.GetFySortTitleAsync(blogsList.page, blogsList.pagesize, true).then((res: any) => { 
    blogsList.dataResult = res.data; }); } static async ConutSort() { 
    await article.ConutSort(7).then((result: any) => { 
    blogsList.count = result.data; }); } } async function QueryAll() { 
    // axios.all([await methods.ConutSort(), await methods.GetFySortTitle()]).then(axios.spread((Fy, co: any) => { 
    // blogsList.count = co.data; // blogsList.dataResult = Fy.data; // })) axios.all([await methods.ConutSort(), await methods.GetFySortTitle()]) } export { 
    methods, QueryAll } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215851.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午1:01
下一篇 2026年3月18日 下午1:01


相关推荐

  • Intellij IDEA第一个java applet程序

    Intellij IDEA第一个java applet程序建好项目之后配置configuration目录结构如下game.htmlmyGame.java运行后显示试着编译myGame.java还是没用这里顺带提一下如何编译myGame.javacmd进入src文件夹,执行命令javacmyGame.java即可在同文件夹生成myGame.class文件如果提示javac不是外部或内部指令按下篇文章进行设置https://jingyan.baidu.com/article/08b6a591bdb18314a80922a0.html回

    2022年7月8日
    60
  • silverlight技巧 获取鼠标滚轮事件 及 判断获取组合键的方法

    silverlight技巧 获取鼠标滚轮事件 及 判断获取组合键的方法

    2021年7月27日
    55
  • 如何清理 WinSxS 文件夹-2022版

    如何清理 WinSxS 文件夹-2022版原文链接目录使用 Dism exe 手动删使用 StartCompone 参数将 ResetBase 开关与 StartCompone 参数一起使用使用 SPSuperseded 参数 PS 不要直接删除 WinSxS 文件夹 您可以使用 Windows 内置的工具来减小 WinSxS 文件夹的大小 从 WinSxS 文件夹中删除文件或删除整个 WinSxS 文件夹可能会严重损坏您的系统 从而使您的 PC 可能无法启动并且无法更新 使用 Dism exe 手动删使用

    2026年3月16日
    2
  • tcp/ip和tcp协议(路由选择协议)

    一图看完本文一、计算机网络体系结构分层计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP与OSI在分层模块上稍有区别。OSI参考模型注重“通信协议必要的功能是什么”,而TCP/IP则更强调“在计算机上实现协议应该开发哪种程序”。二、TCP/IP基础1.TCP/IP的具体含义从字面意义上讲,有人可能会认为…

    2022年4月10日
    62
  • 即梦,口型15秒以上的怎么制作

    即梦,口型15秒以上的怎么制作

    2026年3月12日
    2
  • 欧拉回路详解

    欧拉回路详解文章目录知识点例题知识点欧拉通路和欧拉回路 欧拉通路 对于图 G 来说 如果存在一条通路包含 G 的所有边 则该通路称为欧拉通路 也称欧拉路径 欧拉回路 如果欧拉路径是一条回路 那么称其为欧拉回路 欧拉图 含有欧拉回路的图是欧拉图 对有向图 G 和无向图 H 图 G 存在欧拉路径与欧拉回路的充要条件分别是 欧拉路径 图中所有奇度点的数量为 0 或 2 欧拉回路 图中所有点的度数都是偶数 图 H 存在欧拉路径和欧拉回路的充要条件分别为 欧拉路径 所有点的入度等于出度或者存在一点出度比入度大 1 起点 一点入

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号