axios:功能强大的网络请求库(黑马程序员)

1.基础参数

axios 可用 async/await 修饰

  1. //引入axios
  2. <script src="https://cdn.bootcss.com/axios/0.19.2/axios.min.js"></script>
  3. //then回调函数:第一个在请求响应完成时触发,第二个在请求失败时触发
  4. //get(地址?查询字符串)
  5. axios.get(地址?key=value&key2=value2).then(function(response){},function(err){})
  6. //get(地址,{params:{key:value, key2:value2}})
  7. //axios.get(地址,{
  8. // params:{
  9. // key:value,
  10. // key2:value2
  11. // }
  12. //}).then(function(response){},function(err){})
  13. //delect 与 get 类似
  14. //post(地址,参数对象)
  15. axios.post(地址,{key:value,key2:value2}).then(function(response){},function(err){})
  16. //var params=new URLSearchParams();
  17. //params.append("key","value");
  18. //params.append("key2","value2");
  19. //axios.post(地址,params).then(function(response){},function(err){})
  20. //put 与 post 类似
  1. axios 的响应结果
  2. data : 实际响应回来的数据
  3. header : 响应头信息
  4. status : 响应状态码
  5. statusText : 响应状态信息

axios全局配置

axios.default.timeout=3000; //设置超时时间
axios.default.baseURL=’http://localhost:3000/api‘; //设置默认地址
axios.default.header[“token”]=”qwerasdf123”; //设置请求头token

2.axios 拦截器

应用场景:

  • 1:每个请求都带上的参数,比如token,时间戳等。
  • 2:对返回的状态进行判断,比如token是否过期

请求拦截器

  1. // 请求拦截器
  2. axios.interceptors.request.use(
  3. config => {
  4. // 每次发送请求之前判断vuex中是否存在token
  5. // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
  6. // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
  7. const token = window.localStorage.getItem("token");
  8. token && (config.headers.Authorization = token);
  9. return config;
  10. },
  11. error => {
  12. return Promise.error(error);
  13. }
  14. );

响应拦截器

  1. //响应拦截器
  2. axios.interceptors.response.use(
  3. response => {
  4. // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据
  5. // 否则的话抛出错误
  6. if (response.status === 200) {
  7. return Promise.resolve(response);
  8. } else {
  9. return Promise.reject(response);
  10. }
  11. },
  12. // 服务器状态码不是2开头的的情况
  13. // 这里可以跟你们的后台开发人员协商好统一的错误状态码
  14. // 然后根据返回的状态码进行一些操作,例如登录过期提示,错误提示等等
  15. // 下面列举几个常见的操作,其他需求可自行扩展
  16. error => {
  17. if (error.response.status) {
  18. switch (error.response.status) {
  19. // 401: 未登录
  20. // 未登录则跳转登录页面,并携带当前页面的路径
  21. // 在登录成功后返回当前页面,这一步需要在登录页操作。
  22. case 401:
  23. vant.Toast.fail("身份验证失败,请关闭重新进入。");
  24. break;
  25. // 403 token过期
  26. // 登录过期对用户进行提示
  27. // 清除本地token和清空vuex中token对象
  28. // 跳转登录页面
  29. case 403:
  30. vant.Toast.fail("登录过期,请关闭重新进入。");
  31. // 清除token
  32. break;
  33. // 404请求不存在
  34. case 404:
  35. vant.Toast.fail("您访问的网页不存在。");
  36. break;
  37. // 其他错误,直接抛出错误提示
  38. default:
  39. vant.Toast.fail(error.response.data.message);
  40. }
  41. return Promise.reject(error.response);
  42. }
  43. }
  44. );

3.测试接口(可自行使用其他接口)

随机获取笑话的接口

| num | 笑话条数 | 类型为数字 |

用户注册的接口

| username | 用户名 | 不能为空 |

4.具体小案例

  1. <input type="button" value="get请求" class="get">
  2. <input type="button" value="post请求" class="post">
  3. <!-- 引入axios -->
  4. <script src="https://cdn.bootcss.com/axios/0.19.2/axios.min.js"></script>
  5. <script>
  6. //get点击事件
  7. document.querySelector(".get").onclick = function () {
  8. axios.get("https://autumnfish.cn/api/joke/list?num=3").then(function (response) {
  9. console.log(response);
  10. }, function (err) {
  11. console.log("错误:" + err);
  12. })
  13. };
  14. // post点击事件
  15. document.querySelector(".post").onclick = function () {
  16. axios.post("https://autumnfish.cn/api/user/reg", { username: "jack" }).then(function (response) {
  17. console.log(response);
  18. }, function (err) {
  19. console.log("错误:" + err);
  20. })
  21. }
  22. </script>

5.axios + vue

注意: axios 中的 this 已经改变,无法拿到 data 中的数据,故使用 that

  1. <div id="app">
  2. <input @click="getJoke" type="button" value="获取笑话">
  3. <p>{{ joke }}</p>
  4. </div>
  5. <script src="https://cdn.bootcss.com/axios/0.19.2/axios.min.js"></script>
  6. <script src="https://cdn.bootcss.com/vue/2.6.11/vue.min.js"></script>
  7. <script>
  8. var app = new Vue({
  9. el: "#app",
  10. data: {
  11. joke: "一个笑话"
  12. },
  13. methods: {
  14. getJoke: function () {
  15. // console.log(this.joke);
  16. var that = this;
  17. axios.get("https://autumnfish.cn/api/joke").then(function (response) {
  18. // console.log(response.data);
  19. //axios中的this已经改变,无法拿到data中的数据,故使用that
  20. // console.log(this.joke);
  21. that.joke = response.data;
  22. }, function (err) {
  23. console.log("错误:" + err);
  24. })
  25. }
  26. }
  27. })
  28. </script>