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) => {// 执行成功后的处理代码})
