axios 二次封装

一般项目往往要对 axios 库进行二次封装,添加一些自定义配置和拦截器等

案例

./service/axios.js

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
*  说明:axios 二次封装*  参数:type       //请求的HTTP方法,例如:'GET', 'POST'或其他HTTP方法*       apiName    //接口地址*       url        //接口模块*       options    //配置参数,例如传{params={}}*/

import axios from 'axios'import api from 'service/apiConfig' //真实接口配置import store from 'vuexStore/store.js' //引用vueximport qs from 'qs'import template from 'url-template'

/**  axios基础配置 */axios.defaults.timeout = 5000;axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8'

// http request 拦截器// 一般设置 tokenaxios.interceptors.request.use(  config => {    if (localStorage.aynUserToken) {      config.headers.common['X-AIYANGNIU-SIGNATURE'] = localStorage.aynUserToken;    }    return config;  },  err => {    return Promise.reject(err);  });

// http response 拦截器axios.interceptors.response.use(  response => {    if (response.data) {      let code = response.data.code      switch (code) {        case 109: // 109 清除token信息并跳转到登录页面          localStorage.aynUserToken = ''        //   vue.$loginVerify()          break;        case 110:        //   vue.$roleVerify()          break;      }    }    return response;  },  error => {    if (error.response) {      let status = error.response.status      switch (status) {        case 401: // 109 清除token信息并跳转到登 大专栏  axios 二次封装录页面          localStorage.aynUserToken = ''        //   vue.$loginVerify()          break;      }    }    let err = error.response ? (error.response.data || error.response) : (error.message || error)    return Promise.reject(err)  });

/* 二次封装 */export default async(type, apiName, url, data, options) => {

  let vm = this  // url拼接  let path = (apiName != '') ? api[apiName] + url : url  // url-template  let UrlTemplate = template.parse(path)  // 格式化地址,若data传入参数是{params:{xx:"xxx",xxx:"xxxx"}}结构的,expand要取{xx:"xxx",xxx:"xxxx"}来格式化url  if (data && data.hasOwnProperty("params")) {    path = UrlTemplate.expand(data.params)    if (!data.params) {      data.params = {}    }    data.params._t = Date.now().toString()  } else {    path = UrlTemplate.expand(data)    if (data) {      data._t = Date.now().toString()    }  }

  // 设置 {form: true}  post/put data转参数拼接字符串  if (options && options.form) {    let opt = {      headers: {        'Content-Type': 'application/x-www-form-urlencoded'      }    }    // 利用 qs 库的stringify() 方法拼接参数字符串    data = qs.stringify(data)    options === {} ? options.headers = opt.headers : options = opt  }  // axios  await axios[type](path, data, options).then((res) => {    // res.data 才是响应数据    vm.result = res.data  })  return vm.result}

调用

  • get/delete 传数据 {} 或者 {params}
  • post/put 传输数据 params(对象)
  • 如果是表单提交 {form: true}
12345678910111213
import res from 'service/axios'

/* 加入进货单、加入采购申请 */export const AddToCart = (params) => res('post', 'apiItem', '/carts/add', params, {form:true})

/* 获取进货单列表 */export const GetCartList = () => res('get', 'apiItem', '/carts/list', {})/* 更新购物车商品数量 */export const CartUpdate = (params) => res('put','apiItem', '/carts/update/{id}',params, {form:true})

/* 根据购物车记录编号(列表时可批量)删除 */export const CartDelete = (params) => res('delete','apiItem', '/carts/delete',{params})...

补充

url-template 库使用

12345678910
var template = require('url-template');

var emailUrl = template.parse('/{email}/{folder}/{id}');

// Returns '/[email protected]/test/42'emailUrl.expand({  email: '[email protected]',  folder: 'test',  id: 42});

原文地址:https://www.cnblogs.com/lijianming180/p/12041499.html

时间: 2024-10-13 04:50:31

axios 二次封装的相关文章

vue中axios的二次封装

我们做项目时,虽然axios也可以直接拿来用,但是对接口比较零散,不太好进行维护,也会产生大量的重复代码,所以我在这对axios进行了统一接口处理 第一步,先在src中的公共文件夹中如utils里新建request.js文件 import axios from 'axios' import router from '@/router/routers' import { Notification, MessageBox } from 'element-ui' import store from '

iOS项目相关@AFN&SDWeb的二次封装

一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m .h定义了HTTP常用的四种GET POST PUT DELETE 请求 一般分别用做增删减查 定义前预处理,请求成功处理,请求失败处理的block 及带多参数w的方法声明 .m设置请求类型跟响应类型,监听网络是否有网络,如果没有,弹出网络异常的警示框 2. UIImageView+WebCache.h及

HtmlTestRunner二次封装(TestRunner.py)

将HtmlTestRunner进行二次封装,是报告生成的更方便 import HTMLTestRunner import unittest import time, os class TestRunner(object): def __init__(self, cases="./"): self.case = cases def get_all_cases(self, class_name): return unittest.defaultTestLoader.loadTestsFro

pywinauto二次封装(pywinnat.py)

将pywinauto常用方法进行封装,使得pywinauto用起来更简单 #头文件的引入 from pywinauto import application from pywinauto import clipboard import SendKeys import win32api import win32con import os, sys, time #二次封装的类 class Pywin(object): #======================= # pywin framwork

二次封装dojo slider

上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的.实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标签的显示和隐藏,上刻度和下刻度的显示隐藏,无序数显示刻度,标签图标的自由选择,大小选择....更多功能大家看完code也可以自己慢慢加进去哈~~~ code有点长,先上slider的class::MyCustomSlider.js [javascript] view plain copy /** * 

二次封装arcgis的timeslider

arcgis的timeslider是对dojo slider二次封装,项目需要,所有Map用统一样式的slider,所以写了一个common的dojo class,统一调用生成slider,作为对timeslider再次封装,感觉挺好用. 这个slider不一定要在Map里使用,还可以在其他地方调用.只是要包含arcgis的js包, 先上JavaScript class的code: [javascript] view plain copy /** * yilei create for IES  

毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.io/picasso/ 我们在上篇OkHttp的时候说过这个Picasso,学名毕加索,是Square公司开源的一个Android图形缓存库,而且使用起来也是非常的简单,只要一行代码就轻松搞定了,你会问,为什么不介绍一下Glide?其实Glide我有时间也是会介绍的,刚好上篇我们用到了Picasso,

加密狗复制备份 克隆 破解 OEM信息 二次封装 行业软件破解 批发零售

加密狗复制备份 加密狗模拟   加密狗破解  定制写狗程序 算法注册机 OEM信息 二次封装 汉化  行业软件破解   酒店客房管理  餐饮娱乐 美容美发  会员管理  口腔诊所 口腔医院管理 商超POS 服装鞋帽 家具生产数控 家具设计拆单 排料优化 家居设计销售 药店管理 汽配汽修汽贸4S店管理 财务进销存 OA办公 企业积分制管理 电脑行业管理系统 客户管理...等各行业管理软件批发零售 合作联系QQ:309889372 部分产品列表展示 部分产品分类展示: 服装设计类行业: 主要针对服装

也谈Volley的二次封装

产品中使用Volley框架已有多时,本身已有良好封装的Volley确实给程序开发带来了很多便利与快捷.但随着产品功能的不断增加,服务器接口的不断复杂化,直接使用Volley原生的JSONObjectRequest已经导致Activity或Fragment层中耦合了大量的数据解析代码,同时当多处调用同一接口时,类似的数据解析代码还不可复用,导致大量重复代码的出现,已经让我越发地无法忍受.基于此,最近思考着对Volley原生的JSONObjectRequest(因为产品中目前和服务器交互所有的接口,