import axios from 'axios'

const HTTP_TIMEOUT = 15000;

export function httpPost(url, params = {},headers = {}) {
return axios.post(url, params, {
headers,
timeout: HTTP_TIMEOUT,
withCredentials: true,
}).then(resp=>resp.data);
} export function httpGet(url, params = {}) {
return axios.get(url, {
params,
timeout: HTTP_TIMEOUT,
withCredentials: true,
}).then(resp=>resp.data);
} export const errorCode = {
SUCCESS: 0,
} // 发送请求,并且对返回进行处理
// succConvert 函数-后台数据格式转换 function postAndConvertResp(url, params, succConvert, errConvert, headers = {}) {
return httpPost(url, params,headers)
.then(resp => {
return resp.err_code === errorCode.SUCCESS ?
succConvert(resp.result) :
errConvert ? errConvert(resp.err_code) : requestErrorHandler(resp.err_code, resp.err_msg);
})
} // 发送请求,并且对返回进行处理
function getAndConvertResp(url, params, succConvert, errConvert) {
return httpGet(url, params)
.then(resp => {
return resp.err_code === errorCode.SUCCESS ?
succConvert(resp.result) :
errConvert ? errConvert(resp.err_code) : requestErrorHandler(resp.err_code, resp.err_msg);
})
} // 默认错误处理
function requestErrorHandler(errCode, errMsg) {  
  throw new ServerRespError(errMsg);
}
// 前端自定义错误
export class ParamError extends Error {
constructor(message) {
super(message) this.errorType = 'ParamError'
}
} // 服务端返回错误
export class ServerRespError extends Error {
constructor(message) {
super(message) this.errorType = 'ServerRespError'
}
}

post请求参数处理:

function appendCommon2QueryStr(params) {
return data2ParamString(params);
} // param对象转换为paramStr
function data2ParamString(data) {
if (typeof data === 'string') {
return data;
}
return objectToParamString(data);
} // 将对象转换成键值对形式,只支持单层
function objectToParamString(data) {
var ret = '';
for (var key in data) {
ret = ret + key + '=' + encodeURIComponent(data[key]) + '&';
}
ret = ret.substr(0, ret.length - 1); // 去除最后的'&'
return ret;
} // 示例
export function example(reqData) {
let request = {
exam : reqData.exam
} request = appendCommon2QueryStr(request); return postAndConvertResp(URL, request, succConvert)
}

axios封装http请求的更多相关文章

  1. vue项目实践-添加axios封装api请求

    安装 axios npm install axios --save 创建实例 (utils/fetch.js) axios 默认提交格式为:application/json 可使用 qs 模块(需要安 ...

  2. Vue axios封装 实现请求响应拦截

    封装 axios.js import axios from 'axios' import { baseURL } from '@/config' class HttpRequest { constru ...

  3. vue-cli配置axios,并基于axios进行后台请求函数封装

    文章https://www.cnblogs.com/XHappyness/p/7677153.html已经对axios配置进行了说明,后台请求时可直接this.$axios直接进行.这里的缺点是后端请 ...

  4. axios浏览器异步请求方法封装 XMLHttpRequest

    axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...

  5. vue-cli3中axios如何跨域请求以及axios封装

    1. vue.config.js中配置如下 module.exports = { // 选项... // devtool: 'eval-source-map',//开发调试 devServer: { ...

  6. vue+axios 对restful 请求封装

    礼拜天来公司整理项目,项目是最近开始重构的,里面的各种http请求接口是restful结构的(为了提升项目的比格),整理一下笔记 [restful介绍][1]博主讲的很详细 技术栈: vue + vu ...

  7. Vue 封装axios(四种请求)及相关介绍(十三)

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

  8. axios封装

    前言 作为出入vue的小萌新,我在写请求的时候,也是毫不犹豫写了ajax,结果肯定是不行的... Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2. ...

  9. vue2.0 axios封装、vuex介绍

    一.前言 博主也是vue道路上的行者,道行不深,希望自己的东西能对大家有所帮助.这篇博客针对 了解过vue基础,但是没有做过vue项目的童鞋.如果想看基础指令,可以看我之前的一篇博客,请点击  跳转, ...

随机推荐

  1. 分享js中的 sort 另一种用法

    // 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft']; // apple排 ...

  2. Network Stack‎ : CookieMonster

    CookieMonster   The CookieMonster is the class in Chromium which handles in-browser storage, managem ...

  3. java关于File.separator

    写好代码在模拟环境下测试,完全没问 题:但linux+tomcat下用的时候,却老是报告“No such file or diretory ”的异常,上传不了.后来发现是文件路径的问题.我的模拟测试环 ...

  4. ttf字体转换成web中使用的woff、svg、eot格式字体

    网站地址:http://www.fontsquirrel.com/tools/webfont-generator(还可以缩小字体文件大小,强烈推荐) ttf转换成eot格式的字体软件:EOTFAST. ...

  5. 洛谷 P1732 [TJOI2011]序列

    P1732 [TJOI2011]序列 题目描述 一指数列A={a1, a2, …, an},根据数列A计算数列B={b1, b2, …, bn},其中: 求\sum\limits^n_{i=1} b_ ...

  6. AutoLayout具体解释+手把手实战

    首先说一下这篇博客尽管是标记为原创,可是事实并不是本人亲自写出来的.知识点和样例本人花了一天各处查找和整理终于决定写一个汇总的具体解释,解去各位朋友到处盲目查找的必要,由于不是转载某一个人的内容.故此 ...

  7. Objective-C_类的扩展

    一Category的定义和使用 二Extension的定义和使用 三Protocol的定义和使用 delegate的使用 一.Category的定义和使用 Category,分类或类目.主要作用是为没 ...

  8. 计算器-- 利用re模块 利用函数封装 第二版

    import re remove_parentheses = re.compile('\([^()]+\)') def Remove_Parentheses(obj, s): # 找到内层的括号并且返 ...

  9. OpenCV —— 直方图与匹配

    直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中.bin中的数值是从数据中计算出来的特征的统计量,这些数据可以是诸如梯度,方向,色彩或任何其他特征. 直方图获得是是数据分布的统计图 ...

  10. Netty系列之Netty编解码框架分析

    1. 背景 1.1. 编解码技术 通常我们也习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途. 反之,解码(Decod ...