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是你传给接口的整个的数据值
        })
    }
  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/bllx/p/11939304.html
Copyright © 2011-2022 走看看