vue axios基于常见业务场景的二次封装的实现

为了更好地在Vue项目中使用axios库,我们可以通过二次封装的方式对axios进行自定义处理,使其更加符合我们项目的实际需求。下面是基于常见业务场景的二次封装步骤及示例说明:

一、安装axios和qs

在使用axios之前,我们需要安装axios和qs两个依赖。axios是一种基于Promise的HTTP客户端,可以用于浏览器和node.js。而qs是一个处理URL查询字符串的JavaScript库。

npm install axios qs -S

二、创建Http封装

我们可以创建一个叫Http.js的文件来封装我们的http请求,该文件应该导出一个已经包装过的axios实例。

import axios from 'axios';
import qs from 'qs';

const instance = axios.create({
    timeout: 10000,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    }
});

instance.interceptors.request.use(
    config => {
        // 在请求发送前做一些处理
        config.method === 'post'
            ? config.data = qs.stringify({...config.data})
            : config.params = {...config.params};
        return config;
    },
    error => {
        // 请求错误时做一些处理
        return Promise.reject(error);
    }
);

instance.interceptors.response.use(
    response => {
        // 对响应数据做一些处理
        return response.data;
    },
    error => {
        // 统一错误处理
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                    error.message = '请求错误';
                    break;
                case 401:
                    error.message = '未授权,请登录';
                    break;
                case 403:
                    error.message = '拒绝访问';
                    break;
                case 404:
                    error.message = `请求地址出错: ${error.response.config.url}`;
                    break;
                case 408:
                    error.message = '请求超时';
                    break;
                case 500:
                    error.message = '服务器内部错误';
                    break;
                case 501:
                    error.message = '服务未实现';
                    break;
                case 502:
                    error.message = '网关错误';
                    break;
                case 503:
                    error.message = '服务不可用';
                    break;
                case 504:
                    error.message = '网关超时';
                    break;
                case 505:
                    error.message = 'HTTP版本不受支持';
                    break;
                default:
            }
            error.message = `${error.message},错误码:(${error.response.status})`;
        } else {
            error.message = `连接出错(${error.response.status})!`;
        }
        return Promise.reject(error);
    }
);

export default instance;

三、创建封装工具

我们可以创建一个叫api.js的文件,里面定义了所有的请求方法。每个请求返回一个promise,因此可以使用.then().catch()方法处理响应。

下面是一个获取用户信息的示例:

import http from './http';

// 获取用户信息
export const getUserInfo = (id) => {
  return http.get(`/users/${id}`);
}

我们可以调用这个方法的方式:

import * as api from './api';

api.getUserInfo(123).then(res => {
    console.log(res);
}).catch(err => {
    console.log(err);
})

四、示例解释

这是一个以获取用户信息为例的二次封装及使用,我们需要首先引入封装好的http请求:

import http from './http';

然后,我们在api.js文件中定义函数getUserInfo,该函数将用户id作为参数传入,并返回一个使用GET请求的promise对象:

export const getUserInfo = (id) => {
  return http.get(`/users/${id}`);
}

此时,我们就可以在页面中进行数据的请求了:

import * as api from './api';

// 获取用户信息
api.getUserInfo(123).then(res => {
    // 做一些处理
}).catch(err => {
    console.log(err);
})

除了这个获取用户信息的示例,我们也可以依据项目需求封装其它请求方法,如后台管理系统的增删改查操作等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue axios基于常见业务场景的二次封装的实现 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue TypeScript使用eval函数遇到的问题

    关于“Vue TypeScript使用eval函数遇到的问题”的完整攻略,我会从以下几个方面进行讲解: 问题描述 常规解决方案 TypeScript中使用eval函数的典型场景 遇到的问题及原因 解决方案详解 示例说明 注意事项 接下来,我会逐一进行讲解。 问题描述 在Vue TypeScript项目中,可能会使用到JavaScript自带的eval函数。然…

    Vue 2023年5月28日
    00
  • vue中forEach循环的使用讲解

    当我们使用Vue.js来开发我们的web应用时,经常需要处理数据的遍历或是循环。在Vue.js中,我们可以通过forEach()方法来对一个数组进行循环,本文将从以下几个方面来讲解vue中forEach循环的使用方法: forEach()的基础使用方法 在Vue.js中使用forEach()进行数组循环 遍历对象时使用forEach()的注意事项 1. fo…

    Vue 2023年5月27日
    00
  • vue项目及axios请求获取数据方式

    Vue.js 是一款流行的前端框架,可以帮助前端开发者构建复杂的单页应用程序。使用 axios 可以方便地获取和传递数据。本文将提供关于 Vue.js 项目及 axios 请求获取数据的完整攻略。 安装 Axios Axios 是一个现代的基于 Promise 的 HTTP 请求库,它用于浏览器和 Node.js。在 Vue.js 项目中使用 Axios,首…

    Vue 2023年5月28日
    00
  • vue获取时间戳转换为日期格式代码实例

    本次我们将详细讲解一下“vue获取时间戳转换为日期格式代码实例”。 一、什么是时间戳 时间戳(Timestamp)是指格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。时间戳常用于计算时间间隔和标记时间等情况。 二、获取时间戳 在 Vue 中,可以使用 JavaScript 自带的 Date.now() 方法获取当前时间戳。代码如下: l…

    Vue 2023年5月27日
    00
  • vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序

    下面是实现”vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序”的完整攻略。 1. 确保已安装vuedraggble插件 在开始实现之前,你需要先在你的项目中安装vuedraggable插件。你可以通过以下命令来安装: npm install vuedraggable –save 2. 使用vuedraggable组件…

    Vue 2023年5月27日
    00
  • Vue精简版风格指南(推荐)

    Vue精简版风格指南 本文是针对Vue框架的风格指南,旨在提供一些代码风格和组件设计的建议,以确保团队协作的一致性和可读性。 组件定义 组件名 组件名应该始终使用 PascalCase 命名规则,因为这更符合 Vue的内部组件实例化机制,比如: // 推荐 <template> <MyComponent /> </templat…

    Vue 2023年5月27日
    00
  • Vue之组件的自定义事件详解

    Vue之组件的自定义事件详解 Vue是一个基于组件化开发的框架,组件的通信是非常重要的一部分。除了父子组件之间的通信,组件之间可以使用自定义事件来进行通信。本文将详细讲解Vue组件的自定义事件的使用方法。 什么是Vue组件的自定义事件 在Vue组件中,我们可以使用$emit()方法来触发自定义事件,然后在父组件中通过监听该自定义事件来接收数据。在一个父组件中…

    Vue 2023年5月28日
    00
  • vue请求数据的三种方式

    下面就开始讲解“vue请求数据的三种方式”攻略: 前言 在前后端分离的架构中,前端的数据一般是通过ajax等方式去获取后端服务的数据。而在Vue框架中,请求数据的方式有三种:$ajax、axios、vue-resource。 1.使用$ajax请求数据 // 引入jquery.js <script src="http://ajax.googl…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部