【axios三部曲】一、使用axios
axios作为一个基于promise的网络请求库,它同时支持浏览器和node环境,是我们开发中常用的一个库
它的一些特性:
- 从浏览器发出XMLHttpRequests
- 从node.js发出http请求
- 支持Promise API
- 拦截请求和响应
- 转换请求和响应数据
- 取消请求
- JSON数据的自动转换
- 客户端支持防止XSRF
资源
- https://www.npmjs.com/package/axios axios库项目地址
- https://github.com/typicode/json-server json-server快速搭建一个REST api服务
准备工作
搭建一个本地服务
npm install -g json-server
db.json
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
运行服务
json-server --watch db.json
服务搭建完毕,就可以从本地访问数据
GET /posts
GET /posts/1
POST /posts
PUT /posts/1
PATCH /posts/1
DELETE /posts/1
axios的使用
axios(config);
axios(url[,config]);
最基础的使用方法,引入了axios库就可以直接使用,核心在于config配置,如果没有传入config,就是用默认的
axios({
url: 'http://localhost:3000/posts',
method: 'get'
});
axios('http://localhost:3000/posts', {
method: 'post',
data: {a:12}
})
axios的别名方法
前面介绍了axios的核心方法,可以满足所有请求方法类型[get, post, delete...],不过也有它的别名方法,是为了方便简写,实际上也是调用axios(config),有如下别名方法:
- axios.request(config)
- axios.get(url[, config])
- axios.delete(url[, config])
- axios.head(url[, config])
- axios.options(url[, config])
- axios.post(url[, data[, config]])
- axios.put(url[, data[, config]])
- axios.patch(url[, data[, config]])
axios的实例使用
有这样一种场景,一个项目需要请求不同域名的数据:
有没有办法让axios区分这两个请求地址,并分别发送请求呢?
这里我们就可以用到axios的实例(instance),通过axios.create()创建,两个实例单独配置,互不影响
// 通过axios.create创建出一个新的单独实例,不和其他实例产生影响
let axiosA = axios.create({
// 根路径,以后的请求地址都会拼接上这个地址
baseUrl: 'http://www.a.com/api',
});
// 这里的请求地址最终为:http://www.a.com/api/getTotal
axiosA.get('/getTotal').then(response=>{});
// =============================================================
let axiosB = axios.create({
// 根路径,以后的请求地址都会拼接上这个地址
baseUrl: 'http://www.b.com/post',
});
// 这里的请求地址最终为:http://www.b.com/post/getName
axiosB.get('/getName').then(response=>{});
axios实例的别名方法
- request(config)
- get(url[, config])
- delete(url[, config])
- head(url[, config])
- options(url[, config])
- post(url[, data[, config]])
- put(url[, data[, config]])
- patch(url[, data[, config]])
- getUri([config])
axios的默认config配置项
axios的配置项比较多,不过大多数都有默认配置,我们就看一些常用的配置,具体的可以参照官方文档
{
url: '/user', // 请求地址
method: 'get', // 如果没有指定method,默认get
baseURL: 'https://some-domain.com/api/', // 请求根路径
transformRequest: [function (data, headers) { // 请求数据转换器
return data;
}],
transformResponse: [function (data) { // 响应数据转换器
return data;
}],
headers: {'X-Requested-With': 'XMLHttpRequest'}, // 请求头
params: { // 请求参数
ID: 12345
},
data: { // post提交数据
firstName: 'Fred'
},
timeout: 1000, // default is `0` (no timeout)
adapter: function (config) { // 适配器,识别浏览器端还是node端
/* ... */
},
auth: {
username: 'janedoe',
password: 's00pers3cret'
},
responseType: 'json', // default
responseEncoding: 'utf8', // default
maxContentLength: 2000,
maxBodyLength: 2000,
maxRedirects: 5, // default
cancelToken: new CancelToken(function (cancel) {
}),
// ...
}
axios请求成功响应结果
axios.get('http://localhost:3000/posts').then(response=>{
console.log(response);
})
当我们请求成功后,response的响应结果到底是怎样的?
{
data: {}, // 请求成功的返回数据
status: 200, // 状态码
statusText: 'OK', // 状态描述
headers: {}, // 请求头
config: {}, // config配置项
request: {} // XMLHttpReqest对象
}
axios的全局默认配置
一些通用的配置项,每次都写很麻烦,就通过全局的方式写一次即可,比如headers头信息,baseUrl等
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
设置好以后,请求就会有这些默认配置
// https://api.example.com/a
axios.get('/a');
假设我又有一个新的请求了,不想用这个baseUrl地址,我们完全可以通过实例的配置重新覆盖全局配置
let axios2 = axios.create({
baseUrl: 'www.baidu.com'
});
// www.baidu.com/b
axios2.get('/b');
axios的配置config优先级
这里有一个要注意点,关于config的优先级谁的最高?从低到高
- axios库的默认defaults // 最低
- 实例的defaults属性
- 传入的config参数 // 最高
axios的拦截器
何为拦截器?
你可以在这个请求发起之前(request interceptor),和响应数据之后(response interceptor)进行拦截处理
请求拦截器1(config) // 函数里面进行处理后,需要返回config
请求拦截器2(config) // 函数里面进行处理后,需要返回config
...
发起数据请求(真实请求)
响应拦截器1(response) // 函数里面处理后需要返回response
响应拦截器2(response) // 函数里面处理后需要返回response
...
返回给用户
如何使用
axios.interceptors.request.use(function success(config){
// 处理数据
return config;
}, function fail(error){
return Promise.reject(error);
});
axios.interceptors.response.use(function success(response){
// 处理数据
// response.data = JSON.parse(response.data);
return response;
}, function fail(error){
return Promise.reject(error);
});
执行流程就如上所示,请求拦截器request会放到 真实请求的前面, 响应拦截器会添加到 真实请求的后面
【axios三部曲】一、使用axios的更多相关文章
- axios介绍与使用说明 axios中文文档
本周在做一个使用vuejs的前端项目,访问后端服务使用axios库,这里对照官方文档,简单记录下,也方便大家参考. Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node ...
- vue-cli配置axios,并基于axios进行后台请求函数封装
文章https://www.cnblogs.com/XHappyness/p/7677153.html已经对axios配置进行了说明,后台请求时可直接this.$axios直接进行.这里的缺点是后端请 ...
- 使用Typescript重构axios(三十)——添加axios.getUri方法
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- 使用Typescript重构axios(三十一)——添加axios.all和axios.spread方法
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- vue中axios使用二:axios以post,get,jsonp的方式请求后台数据
本文为博主原创,转载请注明出处 axios在上一篇中讲过:vue中axios使用一:axios做拦截器,axios是请求后台资源的模块,用来请求后台资源. axios本身是支持get,post请求后台 ...
- vue中axios使用一:axios做拦截器
转载请注明出处: 项目中用到了单点登录,依赖的公司通用的jar包,且项目为前后端分离的方式,为了管理系统的所有请求和 超时管理,用到了axios,做前端请求拦截,并做管理. 其有以下特点: axios ...
- 学习axios必知必会(1)~axios基本介绍、axios配置、json-server接口模拟工具
一.axios基本介绍 1.axios(前端最流行的 ajax 请求库) 特点: ① 基于 xhr + promise 的异步 ajax 请求库 ② 浏览器端/node 端都可以使用 ③ 支持请求/响 ...
- axios formData提交数据 && axios设置charset无效???
但是这样会出现一个问题,什么问题呢? 我设置了请求头编码utf-8,但是没生效 content-type里面没有出现utf-8???????查了很多资料,说这是axios固有的bug,我....... ...
- 全局设置axios发送cookie(axios 默认不发送cookie)
import axios from 'axios' axios.defaults.withCredentials=true; 如图:
随机推荐
- prtotype原型对象
js每个对象都拥有一个原型对象,每个对象都能从原型对象继承方法和属性,原型链就是基于原型对象而产生的, 也就是说,每个对象都能继承原型对象的方法和属性,这样一层一层的继承,就形成了原型链 当然,你也可 ...
- 动态代理及java演示
代理模式的理解 首先代理二字的含义,程序中代理与字面意思的代理并无区别.比如现实生活中办理车辆审车,我们经常会听说花钱找代理(又称黄牛)办手续,即办手续这个事,不是我们亲自执行,而是通过代理( ...
- kafka入门(采坑)笔记
前言 之前在工作和学习过程中也会有记笔记的习惯,但是没有发布出来,也因最近各方面的瓶颈急需突破和提升,所以还是要很积极的融入大环境大生态中,好废话不多说,说下这次遇到的问题 第一步启动zk 根据教程安 ...
- GIS :元宇宙未来发展的有力技术支撑
摘要:元宇宙是描述未来互联网迭代发展的一个概念,是一个将现实世界和虚拟世界相互融合的一个可感知的持久.共享的3D虚拟空间组成的世界. 本文分享自华为云社区<[云驻共创]元宇宙漫游指南-新一代GI ...
- 【解决了一个小问题】gin框架中出现如下错误:"[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 500"
POST到数据到一条gin框架的接口后,客户端收到400错误,并且返回了业务中返回的"decode json fail". 关键代码是: func report(c *gin.Co ...
- window10教育版激活失败
问题 输入完key之后显示无法连接服务器 再次输入密钥无效,而且家庭版密钥激活也没了 使用命令行消除过去的key,使用新的教育版key后,显示运行在运行microsoft windows 非核心版本的 ...
- Vue框架怎么使用mediainfo.js来检测视频文件是否有音轨?
啥是MediaInfo? 简而言之,MediaInfo是一个能读取音频和视频文件并分析和输出音视频信息的工具,能输出的内容包括视频信息,音轨,字幕等. MediaInfo也可以在web端使用,需要使用 ...
- golang汇总gomodules的初始化与改变模块的依赖关系
1. gomodules的初始化 2. 改变模块的依赖关系
- MIME类型说明(HTTP协议中数据类型)
MIME(HTTP协议中数据类型) MIME:多功能Internet邮件扩充服务.MIME类型的格式是"大类型/小类型",并与某一种文件的扩展名相对应. 常见的MIME类型: RT ...
- Swift 学习网址精选 By HL
虽然目前iOS大部分的项目开发语言用的不是Swift,但随着Swift的不断强大,取代Objective-C 指日可待,所以学习Swift是十分必要的.但毕竟是亲儿子,目前只有Foundation被翻 ...