axios入门

一、axios请求方式

axios安装教程:

​ https://www.npmjs.com/package/vue-axios

第一种:params,不安全

    //.then是响应成功的结果,.catch是请求失败的结果
    
    login(){
            //psot有参请求
            this.axios.post('/api/cunluo/userinfo/unintercept/userinfoLogin',
            {
                params: {
                    uEmail: "test1",                    
                    uPassword: "123456"
                }
            }).then(res => {
                console.log(res);
            }).catch(err => {
                console.log(err)
            })
        }

第二种:

//url后“name=张三”
//推荐这种post请求发送参数
this.axios
        .post("/api/cunluo/userinfo/unintercept/userinfoLogin",
          "uEmail:test1&uPassword:123456"
        )
        .then((res) => {
          console.log(res);
        })
        .catch((err) => {
          console.log(err);
        });

第三种:data

this.axios
        .post("/api/cunluo/userinfo/unintercept/userinfoLogin", {
          data: {
            sId: 108,
            password: "123456",
          },
        })
        .then((res) => {
          console.log(res);
        })
        .catch((err) => {
          console.log(err);
        });

第四种:url后面{ },需要后端配合

在这里插入图片描述

//后台服务器端给接收的参数加上@requestBody,然后在请求中更改
      this.axios
        .post("/api/cunluo/userinfo/unintercept/userinfoLogin", {
          uEmail: "test1",
          uPassword: "123456",
        })
        .then((res) => {
          console.log(res);
        })
        .catch((err) => {
          console.log(err);
        });
二、vue中axios解决跨域设置代理问题

1.在vue中config文件下的index.js文件中配置代理

module.exports = {
  dev: {

    // Paths
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
      '/api':{  //匹配所有以 'api'开头的请求路径
        target:'http://111.231.227.66/',  //代理目标的基础路径
        changeOrigin:true,  //支持跨域
        secure:false,
        pathRewrite:{ //重写路径:去掉路径中的开头的'/api'
          '^/api':''
        }
      }
    },
    

2.在axios请求路径中更改

login(){
            this.axios.post('/api/cunluo/userinfo/unintercept/userinfoLogin',
            {
                params: {
                    uEmail: "test1",                    
                    uPassword: "123456"
                }
            }).then(res => {
                console.log(res);
            }).catch(err => {
                console.log(err)
            })
        }
三、axios并发请求

axios.spread实现并发,处理响应数据结果

   this.axios
        .all([
          this.axios.post("/api/cunluo/userinfo/unintercept/userinfoLogin", {
            uEmail: "test1",
            uPassword: "123456",
          }),
          this.axios.post("/api/cunluo/userinfo/unintercept/userinfoLogin"),
          this.axios.post("/api/cunluo/userinfo/unintercept/userinfoLogin")
        ])
        .then(
          //axios.spread几个参数就有几个返回请求值(处理响应数据结果)
          this.axios.spread((one, two,three) => {
            console.log(one), console.log(two),console.log(three);
          })
        )
        .catch((err) => {
          console.log(err);
        });
四、axios全局配置属性

在这里插入图片描述

        //api已经在配置代理那写了,所以post请求中可以不写/api
        //和配置代理配合使用
       this.axios.defaults.baseURL='/api';  
       this.axios.defaults.timeout=5000;    //延迟多少毫秒没有反应就报错超时
       this.axios.post('/cunluo/userinfo/unintercept/userinfoLogin').then(res=>{
           console.log(res)
       }) 
五、axios的实例
      let newvar=this.axios.create({
          baseURL:'/api',
          timeout:5000
      })
	  //实例中也可以添加method属性
      let newvar2=this.axios.create({
          baseURL:'/api/cunluo',
          timeout:5000
      })
      //全局是全部axios都可以使用,实例是用这个实例时,才能用实例中的属性

      newvar({
          method:'post',
          url:'/cunluo/userinfo/unintercept/userinfoLogin'
      }).then(res=>{
          console.log(res);
      })
      //这就是实例的封装

    newvar2({
          method:'post',
          url:'/userinfo/unintercept/userinfoLogin'
      }).then(res=>{
          console.log(res);
      })
六、axios拦截器
      //axios给我们提供了两大类拦截器
      // 一种是请求方向的拦截(成功请求,失败的) 另一种是响应方向的(成功的,失败的)
      //拦截器的作用 用于我们在网络请求的时候在发送请求或者响应是对操作进行响应的处理
      //具体用于 发送请求时可以添加网页加载的动画 强制登录
      //响应的时候可以进行相应的数据处理
 

1.常规请求方式

      this.axios
        .post("/api/cunluo/userinfo/unintercept/userinfoLogin")
        .then((res) => {
          console.log(res);
          console.log("post响应回来的数据");
        });

请求方向的拦截(第一个是拦截,第二个是错误回调)

      this.axios.interceptors.request.use(
        (config) => {
          console.log("进入请求拦截器");
          console.log(config);
          //拦截之后会停下来,要继续放下走,让他返回,需要return
          return config;
        },
        (err) => {
          // 失败返回错误
          //错误回调
          return Promise.reject(error);
        }
      );
      //拦截器的错误返回不能用catch!!!
      
      

响应方向的拦截(第一个是拦截,第二个是错误回调)

      this.axios.interceptors.response.use(
        (config) => {
          console.log("响应拦截器");
          console.log(config);
          //拦截之后会停下来,要继续放下走,让他返回,需要return
          return config;
        },
        (err) => {
          // 失败返回错误
          //错误回调
          console.log("响应方向失败");
          return Promise.reject(error);
        }
      );

2.使用axios实例与拦截器结合

先实例:

	  // //实例对象与拦截器配合使用
      // //实例对象.interceptors.request.use() 请求拦截器
      //先实例->拦截器->发送axios请求

      let newvar2 = this.axios.create({
        baseURL: "/api/cunluo",
        timeout: 5000,
      });

拦截器:

请求方向的拦截:

newvar2.interceptors.request.use(
        (config) => {
          console.log("进入请求拦截器");
          console.log(config);
          //拦截之后会停下来,要继续放下走,让他返回,需要return
          return config;
        },
        (err) => {
          // 失败返回错误
          //错误回调
          return Promise.reject(err);
        }
      );

响应方向的拦截:

    newvar2.interceptors.response.use(
        (config) => {
            console.log("进入响应拦截器");
            console.log(config);
            //拦截之后会停下来,要继续放下走,让他返回,需要return
            return config;
        },
        (err) => {
            // 失败返回错误
            //错误回调
            return Promise.reject(err);
        }
    );

发送axios请求:

      // axios实例来请求;

      //实例对象
      newvar2({
        method: "post",
        url: "/userinfo/unintercept/userinfoLogin",
      }).then((res) => {
        console.log(res);
      });
七、axios在vue中的模块封装

第一种:用变量传递

新建一个js文件

//封装位置
import axios from "axios";
export function request(config, success, fail) {
    // axios({
    //     url: config,
    //     method: 'post'
    // }).then(res => {
    //     success(res);
    // }).catch(err => {
    //     fail(err)
    // })
}

//调用者位置(vue中,在main.js文件中调用)

import {request} from './network/request/request'

request('/userinfo/unintercept/userinfoLogin',res=>{
  console.log(res)
},err=>{
  console.log(err)
})

第二种:用对象参数

//封装位置
import axios from "axios";

//第二种封装方法,用对象传递
export function request(config) {
    axios({ url: config.url, method: 'post' }).then(res => {
        config.success(res);
    }).catch(err => {
        config.fail(err)
    })
}

//调用者位置(vue中,在main.js文件中调用)
//第二种调用方式,用对象传递
import {request} from './network/request/request'

request({
  url: '/api/cunluo/userinfo/unintercept/userinfoLogin',
   success: res => {
    console.log(res)
  }, fail: err => {
    console.log(err)
  }
})


第三种:对象传递,用Promise封装axios实例

//第三种封装方法
export function request(config) {
    let newVar = axios.create({
        baseURL: "/api/cunluo/userinfo/unintercept",
        timeout: 5000,
        method: 'post'
    });
    //返回的是promise值
    return new Promise((resolve, reject) => {
        newVar(config.url)
    }).then(res => {
        console.log(res)
        resolve(res)
    })
    .catch(err => {
        console.log(err)
        reject(err)
    })
}
//注意回调then和catch的位置,紧跟promise后面


// 第三种调用方式

//成功发送了axios
request({
  // url: '/api/cunluo/userinfo/unintercept/userinfoLogin'
  url:'userinfoLogin'
}).then(res=>{
  console.log(res);
}).catch(err=>{
  console.log(err)
})

第四种:最推荐使用最后一种封装方法!用对象传参

//第四种封装方法

export function request(config) {
    // axios实例创建完后,返回的就是一个promise
    //axios本身就是一个promise
    let newVar = axios.create({
        baseURL: "/api/cunluo/userinfo/unintercept",
        timeout: 5000,
        method: 'post'
    });
    return newVar(config)
}


// 第四种调用方式
request({
  url:'userinfoLogin'
}).then(res=>{
  console.log(res)
})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值