ToB企服应用市场:ToB评测及商务社交产业平台
标题:
axios入门基本利用方法
[打印本页]
作者:
祗疼妳一个
时间:
2024-8-26 08:43
标题:
axios入门基本利用方法
01 json-server的先容和服务器搭建
https://github.com/typicode/json-server
json-server的作用
1.快速搭建一个http服务,可以在30秒内不需要任何编码创建一个假的服务器
2.axios需要向服务端发送哀求,需要服务端联合axios
创建服务过程:
1.install
2.创建db.json
install
npm install json-server
复制代码
run
npx json-server db.json
复制代码
或
json-server --watch db.json
复制代码
延长相应
json-server --watch db.json
-d 2000
复制代码
02 axios的先容及页面设置
https://github.com/axios/axios
定义
:
基于Promise的http客户端,可以在浏览器和nodejs中运行
在浏览器端借助axios可以发送ajax(XMLHttppRequests)哀求,在nodejs中借助axios可以发送http哀求
特点
:毗连哀求和相应;对哀求和相应数据做转化;取消哀求;自动转化为json数据;掩护阻挡XSRF攻击
设置
:
1.利用npm
$ npm install axios
复制代码
2.利用brower
$ bower install axios
复制代码
3.利用yarn
和npm是一个意思
$ yarn add axios
复制代码
4.利用CDN
在网页中举行引入
CDN 国内CDN网站: https://www.bootcdn.cn/
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.5.0/axios.js"></script>
复制代码
03 axios的利用
基本利用-利用axios这个函数发送哀求
1.
GET
btns[0].onclick = function(){
//发送 AJAX 请求(axios返回Promise对象,所以用then方法指明成功的回调)
axios({
//请求类型
method: 'GET',
//URL
url: 'http://localhost:3000/posts/2',
}).then(response => {
// 获取结果
console.log(response);
});
}
复制代码
2.
POST
添加新内容 哀求体将内容传给服务器 json-server对内容保存
//4-添加一篇新的文章 发送post请求
btns[1].onclick = function(){
//发送 AJAX 请求
axios({
//请求类型
method: 'POST',
//URL
url: 'http://localhost:3000/posts',
//设置请求体
data: {
id: "3",
title: "今天天气不错, 还挺风和日丽的",
author: "张三"
}
}).then(response => {
console.log(response);
});
}
复制代码
3.
PUT
//更新数据 将id为3的文章更改内容
btns[2].onclick = function(){
//发送 AJAX 请求
axios({
//请求类型
method: 'PUT',
//URL
url: 'http://localhost:3000/posts/3',
//设置请求体
data: {
title: "今天天气不错, 还挺风和日丽的",
author: "李四"
}
}).then(response => {
console.log(response);
});
}
复制代码
4.
delete
//删除数据
btns[3].onclick = function(){
//发送 AJAX 请求
axios({
//请求类型
method: 'delete',
//URL
url: 'http://localhost:3000/posts/3',
}).then(response => {
console.log(response);
});
}
复制代码
其他利用:利用axios对象当中的一些方法来发送哀求
//发送 GET 请求
btns[0].onclick = function(){
// axios()
axios.request({
method:'GET',
url: 'http://localhost:3000/comments'
}).then(response => {
console.log(response);
})
}
//发送 POST 请求
btns[1].onclick = function(){
// axios()
axios.post(
'http://localhost:3000/comments',
{
"body": "喜大普奔",
"postId": 2
}).then(response => {
console.log(response);
})
}
复制代码
04 axios哀求相应结果的结构
Console
config 设置对象,包含哀求类型、url、哀求体
data 相应体的结果(服务器的相应结果)
headers 相应头信息
request 原生AJAX哀求
05 axios设置对象详细说明
axios(config)
设置项就是axios函数的参数
{
// `url` 是用于请求的服务器 URL,设置给谁发送请求
url: '/user',
// `method` 是创建请求时使用的方法
method: 'get', // default
// baseURL+url形成最终发送请求的路径结果
baseURL: 'https://some-domain.com/api/',
// `transformRequest` 允许在向服务器发送前,修改请求数据
// 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
// 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
transformRequest: [function (data, headers) {
// 对 data 进行任意转换处理
return data;
}],
// `transformResponse` 在传递给 then/catch 前,允许修改响应数据
transformResponse: [function (data) {
// 对 data 进行任意转换处理
return data;
}],
// `headers` 是请求头信息,有时候需要进行身份校验
headers: {'X-Requested-With': 'XMLHttpRequest'},
// `params` 用于传递参数
// 必须是一个无格式对象(plain object)或 URLSearchParams 对象
params: {
ID: 12345
},
// `paramsSerializer` 是一个负责 `params` 序列化的函数 (用得少)
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
// `data` 是作为请求主体被发送的数据
// 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
// 在没有设置 `transformRequest` 时,必须是以下类型之一:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - 浏览器专属:FormData, File, Blob
// - Node 专属: Stream
data: {
firstName: 'Fred'
},
data: 'Country=Brasil&City=Belo Horizonte',//data有以上两种形式分别是json格式和表单格式
// 如果请求话费了超过 `timeout` 的时间,请求将被中断
timeout: 1000, // default is `0` (no timeout)
// `withCredentials` 表示跨域请求时是否写到Cookie
withCredentials: false, // default
// `adapter` 允许自定义处理请求,以使测试更轻松
// 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
//对请求的适配器做设置,两种:一种是AJAX,一种是在js中发送HTTP
adapter: function (config) {
/* ... */
},
// `auth` 表示应该使用 HTTP 基础验证,并提供凭据
// 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
auth: {
username: 'janedoe',
password: 's00pers3cret'
},
// `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
responseType: 'json', // default
// `responseEncoding` indicates encoding to use for decoding responses
// Note: Ignored for `responseType` of 'stream' or client-side requests
responseEncoding: 'utf8', // default
// `xsrfCookieName` 跨站请求标识,对cookie名字进行设置
xsrfCookieName: 'XSRF-TOKEN', // default
// `xsrfHeaderName`跨站请求标识,对头信息进行设置
xsrfHeaderName: 'X-XSRF-TOKEN', // default
//以上两个都是安全设置,保证请求来自自己的客户端,而不是来自未知其他页面,起到保护作用
/*
ps:为什么起到保护作用?
服务器在返回结果的时候会返回一个唯一标识,下一次再发送请求的时候需要把标识传回去,服务器认证没有问题才会响应
*/
// `onUploadProgress` 允许为上传处理进度事件
onUploadProgress: function (progressEvent) {
// Do whatever you want with the native progress event
},
// `onDownloadProgress` 允许为下载处理进度事件
onDownloadProgress: function (progressEvent) {
// 对原生进度事件的处理
},
// `maxContentLength` 定义允许的响应内容的最大尺寸(字节)
maxContentLength: 2000,
//`validateStatus` 对响应结果的成功做设置,返回true就是成功
validateStatus: function (status) {
return status >= 200 && status < 300; // default
},
// `maxRedirects` 定义在 node.js 中 follow 的最大重定向(跳转)数目
// 如果设置为0,将不会 follow 任何重定向
maxRedirects: 5, // default
// `socketPath` 设定Socket文件的位置,作用是向docker进程发送请求
socketPath: null, // default
// `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
// `keepAlive` 默认没有启用
httpAgent: new http.Agent({ keepAlive: true }),
httpsAgent: new https.Agent({ keepAlive: true }),
// 'proxy' 定义代理服务器的主机名称和端口
// `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
// 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
proxy: {
host: '127.0.0.1',
port: 9000,
auth: {
username: 'mikeymike',
password: 'rapunz3l'
}
},
// `cancelToken` 指定用于取消请求的 cancel token
// (查看后面的 Cancellation 这节了解更多)
cancelToken: new CancelToken(function (cancel) {
})
}
复制代码
06 axios的默认设置
//默认配置
axios.defaults.method = 'GET';//设置默认的请求类型为 GET
axios.defaults.baseURL = 'http://localhost:3000';//设置基础 URL
axios.defaults.params = {id:100};
axios.defaults.timeout = 3000;
复制代码
07 axios创建实例对象
1-创建实例对象
const demo = axios.create({
baseURL: 'https://api.apiopen.top',
timeout: 2000
});
复制代码
2-利用实例对象
利用设置对象调用哀求
duanzi({
url: '/getJoke',
}).then(response => {
console.log(response);
});
复制代码
利用封装函数来调用哀求
duanzi.get('/getJoke').then(response => {
console.log(response.data)
})
复制代码
08 axios拦截器
拦截器就是一些函数
哀求拦截器:发送哀求之前用一些函数对哀求的参数和内容举行处理惩罚和检测,如果没有问题就发送哀求,如果有问题就停止发送哀求
相应拦截器:在相应之前对结果做处理惩罚和检查
在哀求或相应被then或catch处理惩罚前拦截它们
1.拦截器的结构和正常执行顺序
//与Promise相关
// 添加请求拦截器 config就是配置项,结构参考上面的配置项说明
axios.interceptors.request.use(function (config) {
console.log("请求拦截器 成功");
return config;
}, function (error) {
// 对请求错误做些什么
console.log("请求拦截器 失败");
return Promise.reject(error);
});
// 添加响应拦截器 responce详情参考上面的响应结构
axios.interceptors.response.use(function (response) {
console.log("响应拦截器 成功");
return response;
}, function (error) {
// 对响应错误做点什么
console.log("响应拦截器 失败");
return Promise.reject(error);
});
//发送请求
axios({
method : 'GET',
url:'http://localhost:3000/posts'
}).then(response =>{
console.log('自定义回调处理成功的结果');
})
复制代码
2.当哀求拦截器发现参数出现问题时
//与Promise相关
// 添加请求拦截器 config就是配置项,结构参考上面的配置项说明
axios.interceptors.request.use(function (config) {
console.log("请求拦截器 成功");
throw '参数出问题';
}, function (error) {
// 对请求错误做些什么
console.log("请求拦截器 失败");
return Promise.reject(error);
});
// 添加响应拦截器 responce详情参考上面的响应结构
axios.interceptors.response.use(function (response) {
console.log("响应拦截器 成功");
return response;
}, function (error) {
// 对响应错误做点什么
console.log("响应拦截器 失败");
return Promise.reject(error);
});
//发送请求
axios({
method : 'GET',
url:'http://localhost:3000/posts'
}).then(response =>{
console.log('自定义回调处理成功的结果');
}).catch(response =>{
console.log('自定义失败回调');
})
复制代码
3.当拥有两个拦截器,执行顺序是:哀求拦截器后进先执行,相应拦截器先辈先执行
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
console.log("请求拦截器 成功 1号");
return config;
}, function (error) {
console.log("请求拦截器 失败 1号");
return Promise.reject(error);
});
axios.interceptors.request.use(function (config) {
console.log("请求拦截器 成功 2号");
return config;
}, function (error) {
console.log("请求拦截器 失败 2号");
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
console.log("响应拦截器 成功 1号");
return response;
}, function (error) {
console.log("响应拦截器 失败 1号");
return Promise.reject(error);
});
axios.interceptors.response.use(function (response) {
console.log("响应拦截器 成功 2号");
return response;
}, function (error) {
console.log("响应拦截器 失败 2号");
return Promise.reject(error);
});
//发送请求
axios({
method : 'GET',
url:'http://localhost:3000/posts'
}).then(response =>{
console.log('自定义回调处理成功的结果');
}).catch(response =>{
console.log('自定义失败回调');
})
复制代码
4.了解config参数和response参数
在哀求拦截器当中可以对哀求参数config举行修改
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
console.log("请求拦截器 成功");
//修改config中的参数
config.params={a:100};
config.timeout=2000;
return config;
}, function (error) {
console.log("请求拦截器 失败");
return Promise.reject(error);
});
复制代码
在response返回的时间可以只返回自己想得到的内容
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
console.log("响应拦截器 成功");
//只想得到响应体data
return response.data;
}, function (error) {
console.log("响应拦截器 失败");
return Promise.reject(error);
});
//发送请求
axios({
method : 'GET',
url:'http://localhost:3000/posts'
}).then(response =>{
console.log('自定义回调处理成功的结果');
//输出得到的response
console.log(response);
}).catch(response =>{
console.log('自定义失败回调');
})
复制代码
结果只得到了哀求体
09 axios取消哀求
官网示例:
const CancelToken = axios.CancelToken;
let cancel;
axios.get('/user/12345', {
cancelToken: new CancelToken(function executor(c) {
// executor 函数接收一个 cancel 函数作为参数
cancel = c;
})
});
// cancel the request
cancel();
复制代码
第一个按钮:发送哀求
第二个按钮:取消哀求
//获取按钮
const btns = document.querySelectorAll('button');
//2.声明全局变量
let cancel = null;
//发送请求
btns[0].onclick = function(){
//检测上一次的请求是否已经完成,如果没有完成直接取消重新发送
if(cancel !== null){
//取消上一次的请求
cancel();
}
axios({
method: 'GET',
url: 'http://localhost:3000/posts',
//1. 添加配置对象的属性
cancelToken: new axios.CancelToken(function(c){
//3. 将 c 的值赋值给 cancel
cancel = c;
})
}).then(response => {
console.log(response);
//将 cancel 的值初始化
cancel = null;
})
}
//绑定第二个事件取消请求
btns[1].onclick = function(){
cancel();
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4