Vue中axios的网络请求封装

前言

  在我们前后端分离的项目中,一般会使用http交互,vue推荐使用的网络请求框架是axios,其实就是在ajax基础上封装的框架,但是我们还可以在代码里对axios进行进一步的封装,方便我们直接使用。

步骤

(1)在vue的src根目录下创建utils包,在utils包下创建api.js文件(名字可以自定义),对各种类型的请求进行封装。

import axios from 'axios'
//根路径 方便全局修改
let  base = '';

//post请求 键值对拼接在url地址上
export const postKeyValueRequest = (url ,params) => {
    return axios({
        method: 'post',
        //注意这里的``不是''
        url: `${base}${url}`,
        data: params,
        //对参数进行url拼接
        transformRequest: [function (data){
            let ret = '';
            for(let i in data){
                //encodeURIComponent() 函数可把字符串作为 URI 组件进行编码
                /*
                因为在作用与url当作参数传递的时候,如参数出现空格这样的特殊字段,
                后台只可以读取到空格前的内容,后面内容丢失,造成数据读取失败,
                但是如果用encodeURIComponent()包裹一下,那会将这些特殊字符进行转义,这样后台就可       以成功读取了,
                所以encodeURIComponent()用于url作为参数传递的场景中使用
                 */
                ret += encodeURIComponent(i)+'='+encodeURIComponent(data[i])+'&'
            }
            console.log(ret)
            return ret;
        }],
        headers: {
            'Content-Type':'application/x-www-form-urlencoded'
        }
    })
}

export const  postRequest = (url,params) => {
    return axios({
        method: 'post',
        data: params,
        url: `${base}${url}`,
    })
}

export const  putRequest = (url,params) => {
    return axios({
        method: 'put',
        data: params,
        url: `${base}${url}`,
    })
}

export const  getRequest = (url,params) => {
    return axios({
        method: 'get',
        params: params,
        url: `${base}${url}`,
    })
}

export const  deleteRequest = (url,params) => {
    return axios({
        method: 'delete',
        params: params,
        url: `${base}${url}`,
    })
}

(2)每次进行网络请求时都有失败与成功两种情况,失败一般都是提醒用户,所以可以对网络请求异常进行统一的处理。

import { Message } from 'element-ui'
//利用axios的返回结果的拦截器
axios.interceptors.response.use(success => {
    //可能成功 可能失败 但是成功与失败都是200
    //success.status与 success.data.status == 500区别 前者是http响应码 后者是我自定义的数据格式
    console.log(success)
    if(success.status && success.status == 200 && success.data.status == 500){
        //通过弹框进行提示,你也可以自己处理进行显示
        Message.error({message:success.data.msg})
        return;
    }
    if(success.data.msg){
        Message.success({message:success.data.msg})
    }
    return success.data;
},error => {
    //访问一定失败 400及400以上
    if(error.response.status == 504 || error.response.status == 404){
        Message.error({message:'服务器被吃了( ╯□╰ )'})
    }else if (error.response.status == 403) {
        Message.error({message: '权限不足,请联系管理员'})
    } else if (error.response.status == 401) {
        Message.error({message:'尚未登录,请登录'})
    } else {
        if (error.response.data.msg) {
            //后端返回的错误
            Message.error({message: error.response.data.msg})
        } else {
            Message.error({message: '未知错误!'})
        }
    }
    return;
})

我自定义的数据格式

{"status":200,"msg":"注销成功","obj":null}

(3)如何使用

import {getRequest} from "../utils/api";
  
  getRequest()

每次使用都要先进行引入,我们可以利用vue插件进行优化,插件通常用来为 Vue 添加全局功能
打开main.js文件添加如下代码

import {postKeyValueRequest} from "./utils/api";
import {postRequest} from "./utils/api";
import {putRequest} from "./utils/api";
import {getRequest} from "./utils/api";
import {deleteRequest} from "./utils/api";

Vue.prototype.postKeyValueRequest = postKeyValueRequest
Vue.prototype.postRequest = postRequest
Vue.prototype.putRequest = putRequest
Vue.prototype.getRequest = getRequest
Vue.prototype.deleteRequest = deleteRequest

优化后的使用方式,直接用this进行引用

		this.postKeyValueRequest('/doLogin',this.loginForm).then(resp =>{
              if(resp){
               
              }
        })

以后项目中就可以复用这套请求框架了!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值