vue项目搭建 (二) axios 封装篇

项目布局

vue-cli构建初始项目后,在src中进行增删修改

// 此处是模仿github上  bailicangdu  的
├── src
| ├── apis
| | ├── api.js // 接口详情配置
│ ├── components // 组件
| | ├── common // 公共组件
│ ├── config // 基本配置
│ │ ├── fetch.js // 获取数据
│ ├── service // 数据交互统一调配
│ │ ├── getData.js // 获取数据的统一调配文件,对接

  • fetch.js
import axios from 'axios'
import qs from 'qs'
import { baseUrl, isFrom } from './../apis/api.js'
const baseURL = baseUrl
// 假设 api里定义了一个请求头类型
const isFrom = isFrom
const headers = isFrom ? {'Content-Type': 'application/x-www-form-urlencoded'} : {'Content-Type': 'application/json', 'Accept': 'application/json'}
// axios实例
const instance = axios.create({
baseURL,
headers,
timeout: 10000,
})
/**
* get 请求数据进行修改 默认以对象形式传参
*/
function getDataConfig(data = {}) {
if (typeof data !== 'object') return data
const arr = []
for (let key in data) {
let res = `${key}=${data[key]}`
arr.push(res)
}
const str = arr.join('&')
return str
}
/**
* 请求数据拦截
*/
instance.interceptors.request.use( config => {
if (isForm && config.method === 'post') config.data = qs.stringify(config.data)
// 此处应该行不通
// if (config.method === 'get') config.data = getDataConfig(config.data)
return config
}, error => {
return Promise.reject(error)
})
/**
* 响应数据拦截
*/
instance.interceptors.response.use(response => {
return response.data
}, error => {
return Promise.reject(error)
})
const fetch = {
post(url, request, status = '0000') {
return new Promise((resolve, reject) => {
instance({
method: 'post',
url,
request,
}).then( response => {
const res = response.data
// 正确
if (res && response.status === status) {
resolve(res)
}
//错误
reject(res)
}).catch(error => {
//错误
reject(error)
})
})
},
get(url, request, status = '0000') {
const data = getDataConfig(request)
return new Promise((resolve, reject) => {
instance({
method: 'get',
url: url + '?' + data
}).then(response => {
const res = response.data
if (res && response.status === status) {
response(res)
}
resject(res)
}).catch(error => {
reject(error)
})
})
}
}
export default fetchs
  • service

    • getData.js
// apis getTableList
import fetch from './../config/fetch.js'
import { apis } from './../apis/api.js'
export const getTableList = data => fetch.post(apis.getTableList, data)
  • component

    • table.vue (某个组件)
    • 注意 单个请求多个请求
// js
import {getTableList, getList} from './../service/getData.js'
export default {
created() {
this.sendPost()
},
methods: {
async sendPost() {
// 请求单个数据
const res = await getTableList(data)
// 多个数据同时请求
cosnt [r, list] = await Promise.all([getTableList(data), getList(data)])
console.log(r, list)
}
}
}

至此,封装axios差不多完结,这算是花费自己几周的时间,来想的吧

  • 有的人人为在请求时排除接口相同的请求,但是我碰到过,统一接口,通过传入不同参数,可以拿到不同数据,因而不太建议排除,若是排除还需更加细致为好
  • 并发目前是我人为比较好的处理方式,之前考虑axios.all感觉封装很麻烦,突然看到有人使用 await Promise.all() 甚是喜欢
  • 若是有问题之处,依旧希望大家多多指正

vue项目搭建 (二) axios 封装篇的更多相关文章

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

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

  2. Vue项目搭建完整剖析全过程

    Vue项目搭建完整剖析全过程 项目源码地址:https://github.com/ballyalex 有帮助的话就加个星星呗~!  项目技术栈:vue+webpack+bower+sass+axios ...

  3. vue项目搭建 (一)

    vue项目搭建 (一) 由于一直想要有自己的框架,因而一直在尝试搭建各类结构,结合vue官网及git上大神bailicangdu的项目,再看看网上一些意见,及个人思考,总结的一些,不到之处希望大家可以 ...

  4. Vue项目搭建与部署

    Vue项目搭建与部署 一,介绍与需求 1.1,介绍 Vue  是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue两大核心思想:组件化和数据驱动.组 ...

  5. vue项目中使用bpmn-节点篇

    前情提要 根据之前的操作,我们可以创建.导入.导出流程图,并对其进预览.通过此篇可以学到: 为节点添加点击.鼠标悬浮等事件 获取流程图内所有指定类型的节点 通过外部更新节点名字 获取节点实例的两种方法 ...

  6. vue项目中使用bpmn-基础篇

    内容概述 本系列“vue项目中使用bpmn-xxxx”分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项 ...

  7. vue项目中使用bpmn-番外篇(留言问题总结)

    前情提要 “vue项目中使用bpmn-xxxx”系列的七篇文章在上周已经更新完成,发表后,有小伙伴在使用时提出了一些文章中没有讲到的问题,此篇作为番外篇,将大家提出的共性问题解答一下,欢迎大家支持原创 ...

  8. Vue项目搭建流程 以及 目录结构构建

    Vue项目搭建流程 以及 目录结构构建 一个小的Vue项目, 基于微信浏览器的移动端, 做了这么多的练习项目, 这一次准备记录下构建的过程, 以方便以后的调高效率 环境准备 操作系统 我的 windo ...

  9. vue项目搭建介绍01

    目录 vue项目搭建介绍01 vue 项目框架环境搭建: 创建项目: vue 项目创建流程: vue项目搭建介绍01 vue 项目框架环境搭建: vue 项目框架: vue django(类似)(vu ...

随机推荐

  1. android系统和ios系统是如何实现推送的,ios为什么没有后台推送

    ios系统为什么没有后台推送? iOS 为了真正地为用户体验负责,不允许应用在后台活动.有了这个限制,但是对于终端设备,应用又是有必要“通知”到达用户的,随时与用户主动沟通起来的(典型的如聊天应用). ...

  2. 洛谷 P4211 [LNOI2014]LCA (树链剖分+离线)

    题目:https://www.luogu.org/problemnew/solution/P4211 相当难的一道题,其思想难以用言语表达透彻. 对于每个查询,区间[L,R]中的每个点与z的lca肯定 ...

  3. Spring Boot @DeleteMapping

      使用DELETE方式进行交互 说明:ResponseData为自定义返回体{String code, String msg, List<?> data} PollutionData 为 ...

  4. J2Cache 和普通缓存框架有何不同,它解决了什么问题?

    不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache.Caffeine .Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已.事实上 ...

  5. 如何用纯 CSS 创作单元素点阵 loader

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/YvBvBr 可交互视频 此 ...

  6. Codeforces - 828E DNA Evolution —— 很多棵树状数组

    题目链接:http://codeforces.com/contest/828/problem/E E. DNA Evolution time limit per test 2 seconds memo ...

  7. Android 图形基础类Rect,扎实基础助腾飞

    转载请注明出处:王亟亟的大牛之路 上周把"垃圾桶动画写完了",然后这礼拜寻思着学习点啥,脑子闷逼了大半天,然后就找了点基础源码读读,把看的经历分享给大家. 先安利:https:// ...

  8. ubuntu如何U盘启 动制作

    先到出 U盘的位置, 方法有很多,terminal 用root权限,采用fdisk -f 命令 unmount /dev/sdb -I //U盘拨出 sdb为U盘挂载的位置 mkfs.fat /dev ...

  9. Javascript 十移跳转页面

    <srcipty> var t = 10; function openwin(){ t -= 1; if( t==0){ location.href='prototype.html'; } ...

  10. 如何调试nRF5 SDK

    本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题.一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_check函数,以 ...