浅谈 Axios 在 Vue 项目中的使用
介绍
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
特性
它主要有如下特性:
浏览器端发起XMLHttpRequests请求
Node端发起http请求
支持Promise API
拦截请求和响应
转化请求和响应(数据)
取消请求
自动转化json数据
客户端支持抵御XSRF(跨站请求伪造)
安装
Vue项目中使用如下命令安装
npm install axios --save
使用
Axios拥有诸多配置项,由于项目中请求数量很多,因此考虑将其封装成公共API,api.js调用一个配置文件config.js
api.js
import axios from 'axios'
import config from './config.js'
class API {
// POST
post(params) {
config.data = params.data
return axios.post(params.url,config.data,config)
}
// 此处可以封装其他方法
}
export default API
config.js
export default {
method: 'post',
// 基础url前缀
baseURL: 'your request url',
// 请求头信息
headers: {
'Content-Type':'application/json;charset=UTF-8'
},
// 参数
data: {},
// 设置超时时间
timeout: 10000,
// 携带凭证
withCredentials: false,
// 返回数据类型
responseType: 'json'
}
getBrandsByHot:function () {
let params = {
url:'/company/list',
data:{
cond:{},
limit:9,
order_word: "attention_rate",
order_direction: -1,
page:1
}
}
api.post(params).then(response => {
this.hot_brand = response.data
}).catch({});
}
由于IE9不支持Promise,因此需要在项目入口main.js中打个补丁,否则无法发出请求
import 'babel-polyfill'
如上,已经能在IE9+上发起网络请求,但是IE9上有个问题:response.data为undefined,因此需要对返回的数据针对不同浏览器进行处理,在API.js中加入如下拦截器
// 响应拦截
axios.interceptors.response.use(function (response) {
var data
// IE9时response.data是undefined,因此需要使用response.request.responseText(Stringify后的字符串)
if(response.data == undefined){
data = response.request.responseText
} else{
data = response.data
}
// 判断data不是Object时,解析成Object
if(!(data instanceof Object)){
data = JSON.parse(data)
}
return data
}, function (error) {
return Promise.reject(error)
});
进阶使用
结合promise 统一请求进一步封装成vue插件 可实现登录、拦截、登出等功能,以及利用axios的http拦截器拦截请求和响应
api.js
export default function fetch (options) {
return new Promise((resolve, reject) => {
const instance = axios.create({
baseURL: SERVER_BASE_URL,
headers: {},
transformResponse: [function (data) {
}]
})
instance.interceptors.request.use(
config => {
return config
},
err => {
return Promise.reject(err)
})
instance.interceptors.response.use(
response => {
return response
},
error => {
return Promise.reject({code:1000}) // 返回接口返回的错误信息
})
//请求处理
instance(options)
.then((res) => {
resolve(res.data)
return false
})
.catch((error) => {
reject(error)
})
})
}
然后我们可以吧请求放到一个文件统一维护(相同的请求再也不用写多次了)
interface.js
const IS_GUEST = params => {
return fetch({
url: '/sys/role/getRoleIdByUserId',
method: 'get',
params: params
})
}
const RESET_PASSWORD = params => {
return fetch({
url: '/person/resetPswByMobile',
method: 'get',
params: params
})
}
export default apiList={
IS_GUEST,
RESET_PASSWORD
}
再来把封装的axio作为vue的插件使用
index.js
//导入模块
import apiList from './interface'
const install = function(Vue) {
if (install.installed) return
install.installed = true
Object.defineProperties(Vue.prototype, {
$api: {
get() {
return apiList
}
}
})
}
export default {
install
}
接下来我们vue中可以这样使用axios
main.js先注册插件
import api from './index'
Vue.use(api)
然后可以在任何文件愉快的使用起来 就像这样
this.$api.RESET_PASSWORD().then(res=>{
// ...
})
浅谈 Axios 在 Vue 项目中的使用的更多相关文章
- 浅谈 OneAPM 在 express 项目中的实践
[编者按]OneAPM 运营团队,近日在 github 上发现了一篇文章,特别奉献给大家.本文作者王宇先生从2015年年初就开始使用我们的产品,也是OneAPM 的忠实用户. OneAPM 是一个优秀 ...
- axios在vue项目中的一种封装方法
记录下之前领导封装的axios请求 npm install axios // 安装 单独写个文件配置axios,此处为request.js import axios from 'axios' //自定 ...
- vue项目中 axios 和Vue-axios的关系
文章收集于:https://segmentfault.com/q/1010000010812113 在vue项目中,会经常看到如下代码: 今天看到有些项目是这样写的,就有点看不懂了. ----解 ...
- 在vue项目中使用axios发送FormData
这个是axios的中文文档,挺详细的: https://www.kancloud.cn/luponu/axios/873153 文档中的 使用 application/x-www-form-ur ...
- Vue项目中使用Vuex + axios发送请求
本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...
- 在vue项目中的axios使用配置记录
默认vue项目中已经安装axios,基于element-ui开发,主要记录配置的相关. axiosConfig.js import Vue from 'vue' import axios from ' ...
- 转:浅谈CSS在前端优化中一些值得注意的关键点
前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...
- 在vue项目中, mock数据
1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...
- 转:如何在Vue项目中使用vw实现移动端适配
https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...
随机推荐
- kafka和mqtt的区别是什么?
两者都是从传统的Pub/Sub消息系统演化出来的,但是进化方向不一样,比较如下: Kafka是为了数据集成的场景,与以往Pub/Sub消息总线不一样,通过分布式架构提供了海量消息处理.高容错的方式存储 ...
- JWT(JSON Web Token) 多网站的单点登录,放弃session
多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token) ...
- Django form表单
Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入, ...
- Django—中间件
中间件简介 什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功 ...
- Linux下C语言socket通信实现发送读取的文件内容--简单实现代码
本次代码涉及到的内容:socket通讯,文件读取 读取的文件以及文件位置: 要读取的文件和c文件在同一个目录下.客户端(client)读取的是123.xml,服务端(server)读取的是23.xml ...
- 拿来主义:layPage分页插件的使用
布衣之谈 所谓插件,大概就是项目中可插可拔的比较小功能化的组件:这些功能组件若能力可及,自己也可以完成——也即自己造轮子,但翻看各种技术社区,相关领域的神人们往往会有更好的实现方案贡献出来,这个时候你 ...
- linux下使用crontab定时执行脚本
使用crontab定时执行脚本 cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务: crontab –e : 修改 crontab 文件,如果文件不存在会自 ...
- 前端性能监控系统 & 前端数据分析系统
前端监控系统 目前已经上线,欢迎使用! 背景:应工作要求,需要整理出前端项目的报错信息,尝试过很多统计工具,如: 腾讯bugly.听云.OneApm.还有一个忘记名字的工具. 因为各种原因,如: 统计 ...
- java制作验证码(java验证码小程序)
手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...
- [HNOI2012]集合选数
题目描述 <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中. 同学们不喜 ...