一、实例为什么引入axios实例?不是有axios()可以用吗? 因为,直接使用axios时,是全局的使用,当url的服务器地址不一样时,即跨域请求,那么就需要修改全局的配置了,这样很麻烦。 于是,使用实例的Axios,即局部...
一、实例
为什么引入axios实例?不是有axios()可以用吗?
因为,直接使用axios时,是全局的使用,当url的服务器地址不一样时,即跨域请求,那么就需要修改全局的配置了,这样很麻烦。
于是,使用实例的Axios,即局部的axios实例。
axios实例基本使用:
// ./src/main.js
const instance1 = axios.create({
baseURL:'http://127.0.0.0',
timeout : 3000
});
const instance2 = axios.create({
baseURL:'http://56.1.4.1',
timeout : 3000
});
instance1({
url: '/get',
}).then(res =>{
console.log(res);
});
instance2({
url: '/get',
}).then(res =>{
console.log(res);
});
即,使用axios.create({//配置信息}),创建一个实例,传入配置参数,需要在发送网络请求的时候,直接调用这个实例,一个实例就对应一个服务器的地址。
二、axios模块封装
为什么引入axios模块封装?
因为,每个组件都可能有发送网络请求的情况,开发中会给每个组件的created()声明周期函数里面添加请求代码,如果要给每个组价都写这个请求代码,那么迭代技术的时候就难维护。
所以,需要把这些发送请求的代码部分抽离出来,封装再导入。
网络请求封装思路:
在./src下创建目录network,里面写网络请求的代码
例如, ./src/network/request.js:
//./src/network/request.js
import axios from 'axios';
export function requset(config, success, failure){
const instance1 = axios.create({
baseURL: 'http://httpbin.org',
timeout : 5000
});
instance1(config).then( res=> {
console.log(res);
success(res);//data processing
}).catch(err => {
console.log('err');
failure(err);
});
};
随后,在main.js中导入这个function,调用并发送网络请求配置,回调函数等。
注意,request接收的参数,success、failure都是回调函数,因为,不能在网络请求的代码部分,写一些数据处理的代码,所以就把这些代码"回调" 出去。
// ./src/main.js
import {Request} from './network/request';
Request({ url: '/get'},
res =>{ console.log(res)},
err =>{ console.log(err)}
);
当然,也可以使用Promise进行封装,把网络请求代码和处理数据代码分离开,即:
高级写法:
// ./src/network/request.js
import axios from 'axios';
export function request(config){
const instance1 = axios.create({
baseURL: 'http://httpbin.org',
timeout : 5000
});
return instance1(config);
}
// ./src/main.js
import {request} from './network/request';
request({
baseConfig: { url: '/get'},
success: (res)=>{ console.log(res)},
failure: (err)=>{ console.log(err)},
}).then(...).catch(...)
因为,axios.create()是经过Promise封装的,它执行的结果本身就返回一个 new Promise(),所以,这里直接返回instance实例;
另外,config是封装了 baseConfig、success、failure
本文标题为:Axios 实例与模块封装
- Android实现轮询的三种方式 2023-02-17
- 详解flutter engine 那些没被释放的东西 2022-12-04
- Android studio实现动态背景页面 2023-05-23
- Android实现监听音量的变化 2023-03-30
- iOS 对当前webView进行截屏的方法 2023-03-01
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- Flutter实现底部和顶部导航栏 2022-08-31
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14