React:网络工具库
发布日期:2021-06-30 15:49:28
浏览次数:3
分类:技术文章
本文共 5555 字,大约阅读时间需要 18 分钟。
网络工具库
一、推荐
1. 原生ajax
2. fetch
- 概念 fetch号称是ajax的替代品,它的API是基于Promise设计的 旧版本的浏览器不支持Promise,需要使用polyfill es6-promise
- 缺点 fetch是比较底层的API,很多情况下都需要我们再次封装 比如:① 手动参数拼接② fetch不支持超时控制
3. axios
- 特性 ① 从浏览器中创建 XMLHttpRequest ② 从 node.js 发出 http 请求 ③ 支持 Promise API ④ 拦截请求和响应 ⑤ 转换请求和响应数据 ⑥取消请求 ⑦ 自动转换JSON数据 ⑧客户端支持防止 CSRF/XSRF
- 支持多种请求方式
axios(config)axios.request(config)axios.get(url[, config])axios.delete(url[, config])axios.head(url[, config])axios.post(url[ data [, config]])axios.put(url[ data [, config]])
3)名称由来
ajax i/o system4. 测试接口
http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk001
http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk002二、axios使用
- 安装
yarn add axios
- 简单使用 ① get请求操作:参数用params
axios({ method: 'get', url: 'http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk001', // 参数传递 params: { name: '张三', age: 18 }}).then((res) => { console.log(res);}).catch((err) => { console.log(err);}).finally(() => { })
② post请求操作:参数用dataaxios({ method: 'post', url: 'http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk001', // 参数传递——data data: { name: '张三', age: 18 } }).then((res) => { console.log(res); }).catch((err) => { console.log(err); }).finally(() => { })
③ 并发请求 1. axios.all,可以放入多个请求的数组 2. axios.all返回的结果是一个数组,可以使用axios.spread将数组的值展开axios.all([ axios({ url: "http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk001" }), axios({ url: "http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk002" })]).then((result) => { console.log(result);}).catch((error) => { console.log(error);})
也可以通过axios.spread()拆解分割axios.all([ axios({ url: "http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk001" }), axios({ url: "http://demo.itlike.com/web/xlmc/api/homeApi/categoriesdetail/lk002" })]).then(axios.spread((res1, res2) => { console.log(res1); console.log(res2);}));
④ 常用的配置选项 在组件中配置当前axios的根路径的话,直接在componentDidMount()
钩子中进行配置-
请求地址
javascript url: '/itlike'
-
请求类型
method: 'get'
-
请求根路径
baseURL: 'http://www.itlike.com'
当前组件全局配置
componentDidMount() { // 当前组件axios配置 axios.defaults.baseURL = 'http://demo.itlike.com/web/xlmc/api'}
-
请求前数据处理
transformRequest: [function (data, headers) { return data;}],
-
请求后数据处理
transformResponse: [function (data) { return data;}],
-
自定义请求头
headers: { 'X-Requested-With': 'XMLHttpRequest'}
-
URL查询对象
params: { ID: 12345 }
-
URL查询对象序列化
paramsSerializer: function (params) { return Qs.stringify(params, { arrayFormat: 'brackets'})} request body data: { firstName: 'Fred'}
-
超时设置
timeout: 1000ms
-
跨域是否带token
withCredentials: false
-
自定义请求处理
adapter: function (config) { /* ... */}
-
身份验证
auth: { username: 'janedoe', password: 's00pers3cret'}
-
响应数据规则
responseType: 'json''arraybuffer', 'document', 'json', 'text', 'stream'
axios.defaults.baseURL = 'https://api.example.com';axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
⑥ 封装Ajax发起axios请求import axios from 'axios'export default function ajax(url = '', params = { }, type = 'GET') { // 0. 变量 let promise; // 1. 返回Promise return new Promise((resolve, reject) => { // 1.1 判断请求类型 if (type.toUpperCase() === 'GET') { //GET promise = axios({ url, params }) } else if (type.toUpperCase() === 'POST') { // POST promise = axios({ method: 'post', url, data: params }) } // 1.2 处理结果并返回 promise.then((response) => { resolve(response); }).catch((error) => { reject(error); }) })}
⑦ 使用axios拦截器- 概念:axios提供了拦截器,用于在每次发送请求前或者得到响应后,进行对应的处理。共4个拦截① 请求成功② 请求失败③ 响应成功④ 响应失败
- 实操 ① 配置请求拦截器
axios.interceptors.request.use((config) => { console.log(config); // 1.一些请求统一加token // 2.统一设置符合服务器要求的config信息 // 3. 在每次请求前,加上请求动画 // 注意:一定要返回,不然会卡在这里 return config;}, error => { console.log(error); return Promise.error(error);});
② 配置响拦截器axios.interceptors.response.use((response) => { console.log('-----'); console.log(response); console.log('-----'); // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据,否则的话抛出错误 if (response.status === 200) { return Promise.resolve(response.data); } else { return Promise.reject(response); }}, (error) => { console.log(error);});
-
http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0
-
解决方案
① 方案1 在package.json中配置"proxy": "http://tingapi.ting.baidu.com"
ajax('/v1/restserver/ting', { method: 'baidu.ting.billboard.billList', type: 1, size: 10, offset: 0}).then(result => { console.log(result);}).catch(error => { console.log(error)})
② 方案2
借助中间件http-proxy-middleware
-
yarn add http-proxy-middleware
-
create src/setupProxy.js
-
const { createProxyMiddleware } = require('http-proxy-middleware');module.exports = function(app) { app.use( '/api', createProxyMiddleware({ target: 'http://tingapi.ting.baidu.com', changeOrigin: true, }) );};
-
-
转载地址:https://kaisarh.blog.csdn.net/article/details/111477183 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年05月03日 20时19分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
有了这些 Chrome 插件,效率提升10倍(建议收藏)
2019-05-01
Python 开发者都会遇到的错误:UnboundLocalError
2019-05-01
只有1%的程序员搞懂过浮点数陷阱
2019-05-01
一名 Google 工程师的大数据处理经验
2019-05-01
从一个骗子身上学到的
2019-05-01
关于Python爬虫,这里有一条高效的学习路径
2019-05-01
Python学习指南,看这篇清晰多了!
2019-05-01
命名难,难于上青天
2019-05-01
史上最烂项目:苦撑12年,600多万行代码...
2019-05-01
没钱没公司,怎么做一款付费产品
2019-05-01
查询亿级数据毫秒级返回!Elasticsearch 是如何做到的?
2019-05-01
FastAPI 构建 API 服务,究竟有多快?
2019-05-01
为什么Quora选择用Python语言?
2019-05-01
一劳永逸学编程的方法
2019-05-01
代码整洁之道-编写 Pythonic 代码
2019-05-01
树莓派程序开机自启动
2019-05-01
连锁门店无线通信方案
2019-05-01
配置Lotus Domino集群视频详解
2019-05-01
Linux软件万花筒
2019-05-01