zoukankan      html  css  js  c++  java
  • Axios的使用

    Axios是一个基于Promise(ES6中用于处理异步的)的HTTP库,用于浏览器和node.js中。主要学习的就是如何封装使用和拦截器的使用

    官网:http://www.axios-js.com/docs/

    万能接口 http://jsonplaceholder.typicode.com/users

    特点:

    • 浏览器中创建XMLHttpRequests
    • 从node.js中创建http请求
    • 支持Promise API
    • 拦截请求和响应
    • 转换请求数据和响应数据
    • 取消请求
    • 自动转换JSON数据
    • 客户端支持防御XSRF

    一、安装方式:

    ①npm 方式安装:npm i axios --save

    ②script方式引入:<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

    ③yarn 方式安装:yarn add axios --save

    二、配置方式

      可以选择封装成文件的方式进行axios的封装,如果项目比较小,也可以选择在main.js中直接封装

           我以main.js文件的封装为例

    import axios from 'axios'
    
    //axios的配置
    const instance = axios.create({
      baseURL: 'https://some-domain.com/api/',//每个接口都会访问的一截路径
      timeout: 1000,//响应超时时间
      headers: {'X-Requested-With': 'XMLHttpRequest'},//设置头部信息,一般遇到跨域的时候,需要后台设置,不需要前端配置
      // `transformRequest` 允许在向服务器发送前,修改请求数据
      // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
      // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
      transformRequest: [function (data) {
        // 对 data 进行任意转换处理
        return data;
      }],
    // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
      transformResponse: [function (data) {
        // 对 data 进行任意转换处理
    
        return data;
      }], 
      // `params` 是即将与请求一起发送的 URL 参数
      // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
       //如果每隔接口都需要传一个相同的参数,可以写在这个里面
       params: {
         ID: 12345
       },    
    });
    
    Vue.prototype.$http = axios

    没有的可以不设置

    Axios拦截器(难理解一些,写过一次就会了)

    重点是axios中拦截器的用法,就是在每次发送或者响应请求时都会拦截一下,一般会用在前端处理用户登陆失效时的检验(一些情况下,后台会选择处理,如果后台处理的话,前端就需要根据后台返回的状态码控制路由跳转至登陆页面就好)

    代码如下

    // 添加请求拦截器
    axios.interceptors.request.use(function (config) {
        // 在发送请求之前做些什么
         //在这里写需要处理的逻辑
        return config;
      }, function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
      });
    
    // 添加响应拦截器
    axios.interceptors.response.use(function (response) {
        // 对响应数据做点什么 
        //在这里写需要处理的逻辑
        return response;
      }, function (error) {
        // 对响应错误做点什么
        return Promise.reject(error);
      });

    这是需要在main.js或者自己额外拿出来的js中设置的代码

    在真正vue组件中发送接收Ajax请求如果操作呢?

    简易代码:(仅供参考)

    this.$http.get('http://jsonplaceholder.typicode.com/users').then((response)=>{
        //输出值
       console.log(response,'接口返回的值')
    }).catch((err)=>{
       console.log(err,'接口出错了')
    })
    
    //如果是不规定方法的写法
    this.$http({
        url:'url',
       method:'post/put/patch/delete'
    }).then((response)=>{
      console.log(response)
    }).catch((err)=>{
      console.log(err)
    })

    在实际的项目中,一般都会将所有的接口进行封装一遍,然后直接在不同的Vue组件中引入不同的接口方法

    接口封装的方式

    import request from '@/utils/request'
    //request是我在request文件中设置的axios的封装,也就是我文章上部分提到的在main.js中封装的代码
    //get方式
    ① export function getData(query){
         return request({
             url:'/api/user/getname',
            method:'get',
           params:query
        })
    }
    ② //使用解构的方式传值,{ip}相当于?ip=ip
    export function getData(ip){
         return request({
             url:'/api/user/getname',
            method:'get',
           params:{ip}
        })
    }
    ③//其他方式
    export function getData(data){
         return request({
            url:'/api/user/getname',
            method:'post',
            data //建议使用data,我之前使用params报错因为data是你传给接口的整个的数据值
        })
    }
  • 相关阅读:
    绝对定位和浮动的区别和运用
    xhtml css 漏 整理
    网站自适应设备屏幕
    CSS 媒体查询 响应式
    js/jquery判断浏览器 & 停止加载
    回调函数之同步调用、回调、异步调用
    Flash生成HTML5动画方法
    在html页面中使用js变量
    BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)
    NOI2019游记
  • 原文地址:https://www.cnblogs.com/bllx/p/11939304.html
Copyright © 2011-2022 走看看