npm install axios --save
首先,导入axios
import axios from ‘axios‘
使用示例
axios({
url: ‘http://123.207.44.32:8000/home/listdata‘,
method: ‘get‘
}).then(res => console.log(res))
axios({
url: ‘http://123.207.32.32:8000/home/data?type=pop&page=1‘
}).then(resp => console.log(resp))
// 等价于http://123.207.32.32:8000/home/data?type=pop&page=1
axios({
url: ‘http://123.207.32.32:8000/home/data‘,
// 针对get请求的参数拼接.
params: {
type: ‘pop‘,
page: 1
}
}).then(resp => console.log(resp))
axios.get(‘http://123.207.32.32:8000/home/data‘, {
params: {
type: ‘pop‘,
page: 1
}
}).then(resp => console.log(resp))
发送并发请求的意思就是需要等请求1,请求2都返回结果之后,再进行之后的业务逻辑操作
示例
// 并发请求
axios.all([
axios.get(‘http://127.0.0.1:8080/a‘),
axios.get(‘http://127.0.0.1:8080/b‘)]
).then(results => console.log(results)) // results封装了两次请求的结果
// axios提供了方法, 将两个请求的结果进行拆分
axios.all([
axios.get(‘http://127.0.0.1:8080/a‘),
axios.get(‘http://127.0.0.1:8080/b‘)
]).then(axios.spread((resp1,resp2)=> {
console.log(resp1); // 请求a接口的结果
console.log(resp2); // 请求b接口的结果
}))
axios.defaults.baseURL = ‘http://127.0.0.1:8080‘;
axios.defaults.headers.common[‘Authorization‘] = AUTH_TOKEN;
axios.defaults.headers.post[‘Content-Type‘] = ‘application/x-www-form-urlencoded‘;
// 因为有了全局配置URL,所以上面的并发请求示例就可以简写
axios.all([
axios.get(‘/a‘),
axios.get(/b‘)]
).then(results => console.log(results)) // results封装了两次请求的结果
其余配置信息参考官网: http://www.axios-js.com/zh-cn/docs/
我们在使用axios发送请求时,直接使用axios.get(‘http://127.0.0.1:8080/index‘).then()就可以了, 其实这个axios是框架帮我们创建好的default实例. 查看源码
declare const Axios: AxiosStatic;
export default Axios;
我们使用 import axios from ‘axios‘ 导入的就是这个default Axios实例.
创建Axios实例
import axios from ‘axios‘
//创建Axios实例instance1
const instance1 = axios.create({
baseURL: "http://12.23.45.45:8080",
timeout: 5000
})
instance1.get("/list").then(resp => console.log(resp));
//创建Axios实例instance1
const instance2 = axios.create({
baseURL: "http://45.23.55.45:8080",
timeout: 8000
})
instance2.get("/category").then(resp => console.log(resp))
/**
* 因为有可能导出多个axios实例, 所有不使用export default {}
*/
import axios from ‘axios‘
export function request1(config,success,failure) {
// 1. 创建axios的实例
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout:5000
})
// 2. 发送真正的网络请求
instance(config).then(
res=>success(res) // 成功回调
).catch(
err=> failure(err) // 失败回调
)
}
调用自定义的request工具类
import {request1} from "./network/request";
request1(
{
url: ‘/home/multidata‘
},
res => console.log(res),
err => console.log(err)
)
request工具类代码 request.js
import axios from ‘axios‘
export function request1(config) {
// 1. 创建axios的实例
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout:5000
})
// 2. 发送真正的网络请求
instance(config.baseConfig).then(
res=>config.success(res) // 成功回调
).catch(
err=> config.failure(err) // 失败回调
)
}
调用方代码
import {request1} from "./network/request";
request1({
baseConfig:{
url:‘/home/multidata‘
},
success: function (res) {
console.log(res);
},
failure:(err)=> console.log(err)
})
总结: 6.2 只是将6.1的所有入参封装成了一个对象. 其实质还是一样的.
request工具类request.js
import axios from ‘axios‘
export function request1(config) {
return new Promise(((resolve, reject) => {
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout:5000
})
instance(config).then( // 其实instance就是一个Promise对象,所以才有了第4种回调方式
res=> resolve(res)
).catch(
err=> reject(err)
)
}))
}
调用方
import {request1} from "./network/request";
request1({
url:‘/home/multidata‘
}).then(
res=> console.log(res)
).catch(
err=> console.log(err)
)
request工具类request.js
import axios from ‘axios‘
export function request1(config) {
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout:5000
})
return instance(config)
}
调用方
import {request1} from "./network/request";
request1({
url:‘/home/multidata‘
}).then(
res=> console.log(res)
).catch(
err=> console.log(err)
)
then
或 catch
处理前拦截它们import axios from ‘axios‘
export function request1(config) {
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout: 5000
})
// 请求拦截
instance.interceptors.request.use(
config => { // 请求成功拦截
// 做一些逻辑...
// 比如: 请求携带token
console.log(config)
return config
},
err =>{ // 请求失败拦截
console.log(err)
return Promise.reject(err)
}
)
return instance(config)
}
export function request1(config) {
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout: 5000
})
// 响应拦截
instance.interceptors.response.use(
response => { // 响应成功
console.log(response)
return response.data; // 响应成功之后,只返回服务器响应的data数据. (对数据进行过滤)
},
err => {// 响应失败
console.log(err)
return Promise.reject(err)
}
);
return instance(config)
}
import axios from ‘axios‘
export function request1(config) {
const instance = axios.create({
baseURL: "http://123.207.32.32:8000",
timeout: 5000
})
// 请求拦截
instance.interceptors.request.use(
config => { // 请求成功拦截
console.log(config)
return config
},
err => { // 请求失败拦截
console.log(err)
return Promise.reject(err)
}
)
// 响应拦截
instance.interceptors.response.use(
response => { // 响应成功
console.log(response)
return response.data; // 响应成功之后,只返回服务器响应的data数据. (对数据进行过滤)
},
err => {// 响应失败
console.log(err)
return Promise.reject(err)
}
);
return instance(config)
}
import {request1} from "./network/request";
request1({
url:‘/home/multidata‘
}).then(
res=> {
console.log(res)
}
).catch(
err=> console.log(err)
)
原文:https://www.cnblogs.com/z-qinfeng/p/13059997.html