npm库中的一个目前最流行的前端请求插件
axios可以支持前端和Node.js端的请求
安装
npm install axios
使用
使用的时候引入axios,在代码中就可以直接使用,axios的用法和fetch比较类似,不过axios会自动帮我们做完fetch第二步中的json,我们在axios后面可以直接.then调取请求结果。
import axios from "axios";
// axios的get方法有两个参数,我们可以只填写第一个参数
// 第一个参数为请求的地址,我们可以直接在网址后面添加请求的get参数,也可以将这些参数放到get的第二个参数中
第二个参数我们可以添加请求的一些参数
axios.get("url?ID=12345")
axios.get("url",{
params: {
ID:12345
}
})
// axios的post方法,
axios.post({
method:'post',
url:'url',
data: {
ID:12345
},
});
创建实例
在axios下有个create的方法,可以创建axios的实例,在axios实例中可以加入很多东西,例如method(请求方法),params(get请求的参数),data(post请求的参数),在这两个里面我们可以带上每次请求都需要带的数据,例如token之类的。
const instance = axios.create({
// baseURL:设置网站根路径
baseURL:"http://www.pudge.wang:3000/api",
// timeout:设置超时时间
timeout:1000,
// 设置请求头
headers:{'X-Custom-Header':'foobar'}
});
拦截器
请求拦截器
// 在上面创建了请求实例之后,我们可以设置拦截器
// 在请求发送之前,我先执行拦截器
// config就是我们发送的请求,我们可以在发送请求前再对请求数据进行一些修改,例如之前没有添加token,可以在这里将token加入进去,如果请求头与我们封装的不同,也可以在这个修改我们的请求头。
instanse.interceptors.request.use(
function (config) {
console.log(config); // 打印出来的是一个请求数据组成的对象
return config;
},
function (error) {
return Promise.reject(error);
}
)
响应拦截器
// 响应拦截器会在我们一接收响应数据时执行,reponse就是服务器响应的数据
// 我们同样可以在里面对response进行一些处理和一些判断之类的操作
instanse.interceptors.response.use(
function (response) {
console.log(response);
return response;
},
function (error) {
return Promise.reject(error);
}
)
axios常用的五种请求方式
axios.request(config);
axios.get(url, config); // 只支持params传参
axios.delete(url[, config]); // 只支持params传参
axios.head(url[, config]); // 只支持params传参
axios.post(url[, data[, config]]); // 同时支持data和params传参
axios.put(url[, data[, config]]); // 同时支持data和params传参
axios.patch(url[, data[, config]]); // 同时支持data和params传参
get:获取数据
用get方法请求时,传参数一定要使用params关键字作为属性传递,params会出现在请求头中的querry string parameters中,并且会出现在浏览器的地址栏中,即会拼接到url中。
// 写法一
axios.get(url, {
params:{
id:12,
},
}).then((res) => {
// 执行成功后处理的代码
})
// 写法二
axios({
method:'GET',
params:{
id:12,
},
url:'请求的接口',
}).then((res) => {
// 执行成功后处理的代码
})
post:提交数据(表单提交+文件上传)
post方式请求,参数有两种形式:
1、from-data表单提交(图片上传,文件上传)
2、application/json
// 方法一
let data = {
id:12,
};
axios.post(url,{data}).then((res) => {
//执行成功后处理的代码
});
// 方法二
axios({
method:'POST',
data:data,
url:'后台地址',
}).then((res) => {
// 执行成功后的处理代码
})
// 写法一
let data = {
id:12,
};
let fromData = new fromData();
for(let key in data) {
formData.append(key, data[key]);
}
axios.post(url, {fromData}).then((res) => {
// 执行成功后的处理代码
})
// 写法二
axios({
method:'POST',
data:fromData,
url:'后台地址',
}).then((res) => {
// 执行成功后的处理代码
})
put:更新数据(所有数据推送到后端)
// 方法一
let data = {
id:12,
};
axios.put(url,{data}).then((res) => {
//执行成功后处理的代码
});
// 方法二
axios({
method:'PUT',
data:data,
url:'后台地址',
}).then((res) => {
// 执行成功后的处理代码
})
patch:更新数据(只将更改的数据推送到后端)
// 方法一
let data = {
id:12,
};
axios.patch(url,{data}).then((res) => {
//执行成功后处理的代码
});
// 方法二
axios({
method:'PATCH',
data:data,
url:'后台地址',
}).then((res) => {
// 执行成功后的处理代码
})
delete:删除数据
// 方法一
axios.delete(url,{
params:{
id:12,
},
}).then((res) => {
//执行成功后处理的代码
});
// 方法二
axios({
method:'DELETE',
params:{
id:12,
},
url:'后台地址',
}).then((res) => {
// 执行成功后的处理代码
})