vue项目搭建 (二) axios 封装篇
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 封装篇的更多相关文章
- vue项目实践-添加axios封装api请求
安装 axios npm install axios --save 创建实例 (utils/fetch.js) axios 默认提交格式为:application/json 可使用 qs 模块(需要安 ...
- Vue项目搭建完整剖析全过程
Vue项目搭建完整剖析全过程 项目源码地址:https://github.com/ballyalex 有帮助的话就加个星星呗~! 项目技术栈:vue+webpack+bower+sass+axios ...
- vue项目搭建 (一)
vue项目搭建 (一) 由于一直想要有自己的框架,因而一直在尝试搭建各类结构,结合vue官网及git上大神bailicangdu的项目,再看看网上一些意见,及个人思考,总结的一些,不到之处希望大家可以 ...
- Vue项目搭建与部署
Vue项目搭建与部署 一,介绍与需求 1.1,介绍 Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue两大核心思想:组件化和数据驱动.组 ...
- vue项目中使用bpmn-节点篇
前情提要 根据之前的操作,我们可以创建.导入.导出流程图,并对其进预览.通过此篇可以学到: 为节点添加点击.鼠标悬浮等事件 获取流程图内所有指定类型的节点 通过外部更新节点名字 获取节点实例的两种方法 ...
- vue项目中使用bpmn-基础篇
内容概述 本系列“vue项目中使用bpmn-xxxx”分为五篇,均为自己使用过程中用到的实例,手工原创,目前属于陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项 ...
- vue项目中使用bpmn-番外篇(留言问题总结)
前情提要 “vue项目中使用bpmn-xxxx”系列的七篇文章在上周已经更新完成,发表后,有小伙伴在使用时提出了一些文章中没有讲到的问题,此篇作为番外篇,将大家提出的共性问题解答一下,欢迎大家支持原创 ...
- Vue项目搭建流程 以及 目录结构构建
Vue项目搭建流程 以及 目录结构构建 一个小的Vue项目, 基于微信浏览器的移动端, 做了这么多的练习项目, 这一次准备记录下构建的过程, 以方便以后的调高效率 环境准备 操作系统 我的 windo ...
- vue项目搭建介绍01
目录 vue项目搭建介绍01 vue 项目框架环境搭建: 创建项目: vue 项目创建流程: vue项目搭建介绍01 vue 项目框架环境搭建: vue 项目框架: vue django(类似)(vu ...
随机推荐
- 深拷贝与浅拷贝js,方法
在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生. 参考 ...
- Java最佳实战
1. 针对日志记录的优化:logback , 预编译形式记录日志,开发debug,生产info,访问日志和错误日志分开,异常日志输出到单独文件 2. 针对数据库连接的优化 :单例模式或数据库连接池 3 ...
- Mac OS下开启自带的apache服务
Apache路径 /etc/apache2/ [root@GGs-MacBook-Pro:/Volumes/SSD/blog#cd /etc/apache2/ [root@GGs-MacBook-Pr ...
- Java学习笔记之对象的复制和克隆
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- Cisco 交换Trunk配置
交换Trunk配置 #进入直连端口下 config)#int f0/1 #配置trunk封装协议 config)#switchport trunk encapsulation dot1q #配置为tr ...
- 20145303刘俊谦 《Java程序设计》第三周学习总结
20145303刘俊谦 <Java程序设计>第三周学习总结 教材学习内容总结 1.类与对象: 类:对现实生活中事物的描述,定义类时用关键词class 对象:这类事物实实在在存在的个体,利用 ...
- 树梅派配置ad-hoc网络
树梅派配置ad-hoc网络 更新与安装 1.更改源/etc/apt/source.list: http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian ...
- web platform installer
下载链接 https://www.microsoft.com/web/downloads/platform.aspx 默认的安装路径 C:\Program Files\Microsoft\Web Pl ...
- 如何确保C#的应用程序只被打开一次
http://stackoverflow.com/questions/184084/how-to-force-c-sharp-net-app-to-run-only-one-instance-in-w ...
- 生信实验室收集---Dana Pe'er Lab
Dana Pe'er Lab of Computational Systems Biology Dana Pe'er是哥伦比亚大学生物科学系的副教授,被认为是计算系统生物学的主要研究人员之一.Dana ...