axios统一封装

摘要:
本文代码参考了网上别人的资料,经过修改而来1/**2*Createdbyzxfon2017/9/6.3*封装统一的ajax请求,统一拦截请求,对不同的请求状态封装4*通常说,ajax请求错误有两种,一种是网络问题或者代码问题所造成的400,500错误等,需要checkStatus方法拦截5*另外一种是请求参数后端通不过验证,由后端抛出的错误,需要checkCode拦截处理6*第二种根据不同的后端框

本文代码参考了网上别人的资料,经过修改而来

1 /**
2 * Created by zxf on 2017/9/6.
3 * 封装统一的ajax请求,统一拦截请求,对不同的请求状态封装
4 * 通常说, ajax 请求错误有两种, 一种是网络问题或者代码问题所造成的 400, 500错误等,需要checkStatus方法拦截
5 * 另外一种是请求参数后端通不过验证, 由后端抛出的错误,需要checkCode拦截处理
6 *第二种根据不同的后端框架或者程序猿又可以分成两种, 一种是直接返回 json, 用一个 特别的 code 来区别正常请求返回的数据, 如:
7  */
8 import qs from 'qs'
9 import axios from 'axios'
10 
11 /**
12 * axios请求拦截器
13 * @param {object} config axios请求配置对象
14 * @return {object} 请求成功或失败时返回的配置对象或者promise error对象
15 **/
16 axios.interceptors.request.use(config =>{
17   returnconfig
18 }, error =>{
19   returnPromise.reject(error)
20 })
21 
22 /**
23 * axios 响应拦截器
24 * @param {object} response 从服务端响应的数据对象或者error对象
25 * @return {object} 响应成功或失败时返回的响应对象或者promise error对象
26 **/
27 axios.interceptors.response.use(response =>{
28   returnresponse
29 }, error =>{
30   returnPromise.resolve(error)
31 })
32 
33 /**
34 * 请求发出后检查返回的状态码,统一捕获正确和错误的状态码,正确就直接返回response,错误就自定义一个返回对象
35 * @param {object} response 响应对象
36 * @return {object} 响应正常就返回响应数据否则返回错误信息
37 **/
38 functioncheckStatus (response) {
39   //如果状态码正常就直接返回数据,这里的状态码是htttp响应状态码有400,500等,不是后端自定义的状态码
40   if (response && ((response.status === 200 || response.status === 304 || response.status === 400))) {
41     return response.data //直接返回http response响应的data,此data会后端返回的数据数据对象,包含后端自定义的code,message,data属性
42 }
43   return { //自定义网络异常对象
44     code: '404',
45     message: '网络异常'
46 }
47 }
48 
49 /**
50 * 检查完状态码后需要检查后如果成功了就需要检查后端的状态码处理网络正常时后台语言返回的响应
51 * @param {object} res 是后台返回的对象或者自定义的网络异常对象,不是http 响应对象
52 * @return {object} 返回后台传过来的数据对象,包含code,message,data等属性,
53 **/
54 //function checkCode (res) {
55 //// 如果状态码正常就直接返回数据
56 //console.log(res)
57 //if (res.code === -404) { // 这里包括网络异常,服务器异常等这种异常跟业务无关,直接弹窗警告
58 //alert(res.message)
59 //return {code: '', message: '网络错误'}
60 //} else { // 除了上面的异常就剩下后端自己返回的状态code了这个直接返回出去供调用时根据不同的code做不同的处理
61 //return res
62 //}
63 //}
64 
65 export default{
66 post (url, data) {
67     returnaxios({
68       method: 'post',
69 baseURL: process.env.BASE_URL,
70 url: url,
71 data: qs.stringify(data),
72 headers: {
73         'X-Requested-With': 'XMLHttpRequest',
74         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
75 },
76       timeout: 10000
77     }).then((res) =>{
78       returncheckStatus(res)
79 })
80 },
81 get (url, params) {
82     returnaxios({
83       method: 'get',
84 baseURL: process.env.BASE_URL,
85 url,
86 params,
87       timeout: 10000,
88 headers: {
89         'X-Requested-With': 'XMLHttpRequest'
90 }
91 }).then(
92       (response) =>{
93         returncheckStatus(response)
94 }
95 )
96 }
97 
98 }

免责声明:文章转载自《axios统一封装》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eCharts 数据转换json解决webstorm卡顿问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

跨域拦截Access-Control-Allow-Origin设置多个origin

在Extjs和java项目碰到了需要同时处理跨域,外部要访问后台接口的问题 原来的代码是这样,只能设置一个extjs前台需要过滤的跨域请求 package com.xgt.config; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import ja...

爬虫实战篇(模拟登录)---我们以模拟去哪儿网为例

(1)、登录实质 互联网上的部分网站需要登录后方能访问,当我们打开网页并登录,就会在客户端生成Cookies(相当于个人身份证)信息,Cookies中包含了SessionId信息,登录后的请求都会带上Cookies发送给服务器,服务器会根据Cookies判断出对应的SessionID,进而找到会话,从而判断用户是否师登录状态,从而是否给用户响应。 (2)、...

关于jQuery中的attr和data问题

今天在使用data获取属性并且赋值时遇到一个小问题,写下来防止以后再跳坑。 在使用jQuery获取自定义属性值时,我们习惯用 $(selector).attr('data-value'); jQuery赋值: $(selector).attr('data-value','123456'); 而data的取值: $(selector).data('value...

sap ABAP关于Data Reference的使用FIELDSYMBOLS

Data References(只能指向abap定义的基本数据或者基本数据组合体) 1、定义数据参考变量(Data References) DATA dref TYPE REF TO DATA.(指向任意类型,但在创建时必须指定对象类型) DATA dref TYPE REF TO DATA_TYPE. 或者 TYPES t_dref TYPE RE...

httprunnerManager- Hook机制

一、Hook引入背景 若接口在测试前后需要进行特殊处理,如执行前的初始化操作、执行完成后的等待操作。类似于 unittest 中的 setUp() 和 tearDown() 方法,HttpRunner中的Hook功能也支持此类操作。 setup_hooks:在HTTP请求发送前执行hook函数,主要用于准备工作;也可实现对请求的request内容进行预处理...

一篇文章教会你创建vue项目和使用vue.js实现数据增删改查

【一、项目背景】 在管理员的一些后台页面里,数据列表中都会对这些数据进行增删改查的操作,例如管理员添加商品、修改商品价格、删除商品、查询商品,我们应该关注这些数据的操作和处理。 【二、项目目标】 主要有以下5个目标: 1、如何创建vue项目。 2、数据添加方法:获取到id和name在data上面获取,组织一个对象,把对象通过数组的相关方法,添加到当前dat...