Vue基础技能【十、axios运用】

1、axios基础使用

1.1、介绍

  • 网址:http://www.axios-js.com
  • 介绍:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

1.2、安装

  • cdn

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    
  • npm

    npm install axios
    

2、axios常用方法

1.1、get方法

  • 格式: axios.get(请求地址,配置对象).then(res=>{ res就是相应的数据 })

    • 注意:res是经过axios封装一下的数据。真正的服务器端返回的数据是存放在res.data中
  • 运用:

    // 为给定 ID 的 user 创建请求
    axios.get('/user?ID=12345').then(function (response) {
        console.log(response);
    }).catch(function (error) {
        console.log(error);
    });
    
    axios.get('/user',{
      params:{
        ID:12345
      }
    }).then(function (response) {
        console.log(response);
    }).catch(function (error) {
        console.log(error);
    });
    
    

1.2、post方法

  • 格式:axios.post(请求地址,请求数据,配置对象).then(res=>{ … })

    • 注意:res是经过axios封装一下的数据。真正的服务器端返回的数据是存放在res.data中
  • 坑:关于post提交参数的问题

    • post提交参数需要提交的数据形式需要为一个字符串 形如: a=b&c=d。我们平时开发习惯于传入对象,所以需要将对象进行处理。 切记:不可以直接提交对象
    • 如何处理?
      • 方法1: 通过for in 将对象转化为 字符串
      • 方法2: URLSearchParams
      • 方法3:qs库
  • 运用:

    // 方法1:
    axios.post('/user','ID=123456&PASS=admin888').then(function (response) {
        console.log(response);
    }).catch(function (error) {
        console.log(error);
    });
    
    // 方法2:
    let data = new URLSearchParams();
    data.append("ID",12345);
    data.append("PASS",'admin888');
    axios.post('/user',data).then(function (response) {
        console.log(response);
    }).catch(function (error) {
        console.log(error);
    });
    
    // 方法3:
    npm i qs --save   // 安装包
    axios.post('/user',qs.stringify({ID:12345,PASS:'admin888'})).then(function (response) {
        console.log(response);
    }).catch(function (error) {
        console.log(error);
    });
    

1.3、create方法

  • 作用: 一个项目涉及到多个axios实例。希望每个分别管理某一类数据请求。

  • 格式: axios.create(配置对象)

    • baseURL: 请求前缀地址
  • 运用:

    let _axios = aixos.create({   // 返回一个axios实例
    	baseURL:"http://...."
    })
    _axios.get() // 才会将前缀地址带上
    

1.4、all方法

  • 作用: 我们希望同时发送多个请求,并且等这些请求都结束了,且拿到了返回的信息之后再做页面的逻辑处理。

  • 注意: 这个方法不是axios.create方法创建出来的实例的方法。而是原生的axios的方法。

  • 运用:

    var 请求1 = _axios.get(请求地址)   // 这里的axios可以使实例axios
    var 请求2 = _axios.get(请求地址)   // 这里的axios可以使实例axios
    axios.all([请求1,请求2]).then(res=>{
    	  res是一个数组。 数组的值就是每个请求返回的数据信息
    })
    

1.5、axios方法

  • 综合方法:类似于jQuery里面的$.ajax方法

  • 格式: axios({ 配置信息 })

  • 配置信息:

    {
       // `url` 是用于请求的服务器 URL
      url: '/user',  【重要!!!】
    
      // `method` 是创建请求时使用的方法
      method: 'get',  【重要!!!】 // default   
    
      // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
      // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
      baseURL: 'https://some-domain.com/api/',  【重要!!!】
    
      // `transformRequest` 允许在向服务器发送前,修改请求数据
      // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法
      // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream
      transformRequest: [function (data, headers) {
        // 对 data 进行任意转换处理
        return data;
      }],
    
      // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
      transformResponse: [function (data) {
        // 对 data 进行任意转换处理
        return data;
      }],
    
      // `headers` 是即将被发送的自定义请求头
      headers: {  【重要!!!】
        	'X-Requested-With': 'XMLHttpRequest',
          'Content-Type':"form/data"
             
      }, 
    
      // `params` 是即将与请求一起发送的 URL 参数
      // 必须是一个无格式对象(plain object)或 URLSearchParams 对象
      params: {   【重要!!!】
        ID: 12345
      },
    
       // `paramsSerializer` 是一个负责 `params` 序列化的函数
      // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
      paramsSerializer: function(params) {
        return Qs.stringify(params, {arrayFormat: 'brackets'})
      },
    
      // `data` 是作为请求主体被发送的数据
      // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH'
      // 在没有设置 `transformRequest` 时,必须是以下类型之一:
      // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
      // - 浏览器专属:FormData, File, Blob
      // - Node 专属: Stream
      data: {   【重要!!!】
        firstName: 'Fred'
      },
    
      // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
      // 如果请求话费了超过 `timeout` 的时间,请求将被中断
      timeout: 1000,   【重要!!!】
    
       // `withCredentials` 表示跨域请求时是否需要使用凭证
      withCredentials: false, // default
    
      // `adapter` 允许自定义处理请求,以使测试更轻松
      // 返回一个 promise 并应用一个有效的响应 (查阅 [response docs](#response-api)).
      adapter: function (config) {
        /* ... */
      },
    
     // `auth` 表示应该使用 HTTP 基础验证,并提供凭据
      // 这将设置一个 `Authorization` 头,覆写掉现有的任意使用 `headers` 设置的自定义 `Authorization`头
      auth: {    
        username: 'janedoe',
        password: 's00pers3cret'
      },
    
       // `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
      responseType: 'json',  【重要!!!】// default   
    
      // `responseEncoding` indicates encoding to use for decoding responses
      // Note: Ignored for `responseType` of 'stream' or client-side requests
      responseEncoding: 'utf8', // default
    
       // `xsrfCookieName` 是用作 xsrf token 的值的cookie的名称
      xsrfCookieName: 'XSRF-TOKEN', // default
    
      // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
      xsrfHeaderName: 'X-XSRF-TOKEN', // default
    
       // `onUploadProgress` 允许为上传处理进度事件
      onUploadProgress: function (progressEvent) {   【重要!!!】
        // Do whatever you want with the native progress event
      },
    
      // `onDownloadProgress` 允许为下载处理进度事件
      onDownloadProgress: function (progressEvent) {  【重要!!!】
        // 对原生进度事件的处理
      },
    
       // `maxContentLength` 定义允许的响应内容的最大尺寸
      maxContentLength: 2000,
    
      // `validateStatus` 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
      validateStatus: function (status) {
        return status >= 200 && status < 300; // default
      },
    
      // `maxRedirects` 定义在 node.js 中 follow 的最大重定向数目
      // 如果设置为0,将不会 follow 任何重定向
      maxRedirects: 5, // default
    
      // `socketPath` defines a UNIX Socket to be used in node.js.
      // e.g. '/var/run/docker.sock' to send requests to the docker daemon.
      // Only either `socketPath` or `proxy` can be specified.
      // If both are specified, `socketPath` is used.
      socketPath: null, // default
    
      // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
      // `keepAlive` 默认没有启用
      httpAgent: new http.Agent({ keepAlive: true }),
      httpsAgent: new https.Agent({ keepAlive: true }),
    
      // 'proxy' 定义代理服务器的主机名称和端口
      // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
      // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
      proxy: {
        host: '127.0.0.1',
        port: 9000,
        auth: {
          username: 'mikeymike',
          password: 'rapunz3l'
        }
      },
    
      // `cancelToken` 指定用于取消请求的 cancel token
      // (查看后面的 Cancellation 这节了解更多)
      cancelToken: new CancelToken(function (cancel) {
      })
    }
    

3、请求拦截和相应拦截

3.1、请求拦截

  • 作用: 在请求发送之前做一些数据的校验、或者添加一些后台校验信息,比如token

    • token是什么??(token校验机制)
      • 我们用户登录的时候,登录成功,后端返回用户信息,且会返回一个token字段。这个字段是一个后端加密后产生的一个字符串。
      • 我们将token保存在本地存储
      • 项目中所有需要判断用户信息的接口,到将必须携带这个token字段过去,后端会对请求进行判断,如果没有携带token那么提示非法请求,如果携带了过期了,那么提示token过期,前端重新登录,如果token正确且在有效期,那么返回对应接口请求的内容。
    • 我们在发送直接就需要将token放入到请求参数,或者请求头中。
  • 使用:

    // 添加请求拦截器
    axios实例.interceptors.request.use(function (config) {
        // 在发送请求之前做些什么    比如添加上token
        return config;  // 如果不return config bane那么请求将会被挂起
      }, function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
      });
    

3.2、响应拦截

  • 作用:在成功的回调函数获取信息之前,做一下拦截。

    • 我们会对状态码进行校验 比如是否成功,没有成功直接拦截掉。成功了,将服务端返回的数据给成功回调。
  • 使用:

    // 添加响应拦截器
    axios实例.interceptors.response.use(function (response) {
        // 对响应数据做点什么
        if(response.status==200){
             return response.data;
        }else{
            console.log("数据请求出错");
            return {
              msg:"数据请求出错",
              status:response.status
            }
        }
      }, function (error) {
        // 对响应错误做点什么
        return Promise.reject(error);
      });
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值