Axios详解

 说明:本篇文章来聊一聊前端向后端发送请求的范式。

目录

一、Axios作用 

 二、使用过程

1.在webstorm中控制台输入如下代码:

 2.在要使用的地方首先引入包

3.axios自带的请求方式

4.封装调用


前言: Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。简单来说就是可以向后台发送各种请求。

一、Axios作用 

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应(比如:在请求前添加授权和响应前做一些事情)
  • 转换请求数据和响应数据(比如:进行请求加密或者响应数据加密)
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

 二、使用过程

1.在webstorm中控制台输入如下代码:

$ npm install axios

 2.在要使用的地方首先引入包

import axios from 'axios';

3.axios自带的请求方式

axios.request(config)

axios.get(url[, config])

axios.delete(url[, config])

axios.head(url[, config])

axios.options(url[, config])

axios.post(url[, data[, config]])

axios.put(url[, data[, config]])

axios.patch(url[, data[, config]])
代码演示如下:

// 创建axios实例
const httpService = axios.create({
    // 请求超时时间 3秒
    timeout: 3000 // 需自定义
});

//get请求
 axios.get(url,param)
          .then(
              response => {
                console.log(response);
              },
              error => {
                console.log(error);
              }
          )

4.封装调用

// 引入axios
import axios from 'axios';

// 创建axios实例
const httpService = axios.create({
    // 请求超时时间
    timeout: 3000 // 需自定义
});

// request拦截器
httpService.interceptors.request.use(
    config => {
        console.log(config.url);
        return config;
    },
    error => {
        // 请求错误处理
        Promise.reject(error);
    }
)

// respone拦截器
httpService.interceptors.response.use(
    response => {
        // 统一处理状态
        // const res = response.data;
        // if (res.statuscode != 1) {
        //     // 返回异常
        //     return Promise.reject({
        //         status: res.statuscode,
        //         message: res.message
        //     });
        // } else {
            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 = '请求错误,未找到该资源';
                    break;
                case 405:
                    error.message = '请求方法未允许';
                    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.response.status}`;
            }
        } else {
            error.message = "连接到服务器失败";
        }
        return Promise.reject(error);
    }
)

/*网络请求部分*/

/*
 *  get请求
 *  url:请求地址
 *  params:参数
 * */
export function get(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'get',
            params: params
             //query:params
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    });
}

/*
 *  post请求
 *  url:请求地址
 *  params:参数
 * */
export function post(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'post',
            data: params,
            //params:params
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    });
}

export function del(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'delete',
            // data: params
            params:params
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    });
}

//put请求
export function put(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'put',
            data: params
            //params:params
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    });
}


/*
 *  文件上传
 *  url:请求地址
 *  params:参数
 * */
export function fileUpload(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'post',
            data: params,
            headers: { 'Content-Type': 'multipart/form-data' }
        }).then(response => {
            resolve(response);
        }).catch(error => {
            reject(error);
        });
    });
}

export default {
    get,
    post,
    fileUpload,
    del,
    put
}

最后祝大家工作顺利!前程似锦!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
二次封装axios是指在axios的基础上进行进一步的封装,以便于在项目中更方便地使用。下面我会详细解释一下二次封装axios的步骤和好处。 1. 创建封装文件:首先,你可以创建一个自定义的封装文件,比如"api.js",用于封装axios请求。 2. 导入axios:在封装文件中,首先需要导入axios库,可以使用npm或者直接引入cdn。 3. 创建实例:接下来,可以创建一个axios实例,通过axios.create()方法来创建。这样可以定义一些默认的配置,如请求的基本URL、请求头等。 4. 设置拦截器:在创建实例后,可以使用interceptors拦截器来对请求和响应进行处理。拦截器可以在请求发送前和响应返回后对数据进行处理,比如添加公共的请求头、处理错误信息等。 5. 封装请求方法:接下来,可以根据项目需要封装不同的请求方法,如get、post等。在封装这些方法时,可以使用创建的axios实例来发送请求,并对返回的数据进行处理。 6. 导出封装后的方法:最后,在封装文件中导出这些封装后的方法,以便在项目中使用。 好处: - 代码复用性增强:通过二次封装axios,可以将一些公共的配置和处理逻辑抽离出来,减少代码的重复编写。 - 统一管理请求:将所有的请求集中在一个文件中,便于统一管理和维护,提高代码的可读性和可维护性。 - 易于扩展和修改:在封装文件中,可以根据项目需求进行自定义配置和处理,方便后续的扩展和修改。 - 方便错误处理:通过拦截器,可以对请求和响应进行全局的错误处理,比如统一处理网络错误、接口异常等情况。 总结: 二次封装axios可以提高代码的复用性和可维护性,方便统一管理请求和处理错误,同时也使得项目的扩展和修改更加灵活方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘飘~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值