• axios的使用


    查看axios详细介绍

    axios 特色

    • 浏览器端发起XMLRequests请求
    • node端发起http请求
    • 支持Promise API
    • 拦截请求和返回
    • 转化请求和返回(数据)
    • 取消请求
    • 自动转化json数据
    • 客户端支持抵御XSRF(跨站请求伪造)

    拦截器

    // 请求拦截器
    axios.interceptors.request.use(function(config){
      // 给所有请求添加token
      let token = localStorage.getItem("token");
      if(token) {
        config.headers["token"] = token;
      }
      return config
    })
    // 响应拦截器
    axios.interceptors.response.use(function(response){return response})
    

    配置项

    • 单请求配置options:axios.post(url,data,options)
    • 全局配置default: axios.defaults[xxx]
    • config:请求拦截器中的参数
    • response.config相应拦截器中的参数
    • options
      • baseURL 基础URL路径
      • params 查询字符串(对象)
      • transformRequest 转换请求体数据
        function(post请求传递的数据){}
      • transformResponse 转换响应体数据
        function(相应返回的数据){}
      • headers 请求头信息
      • data 请求体数据
      • timeout 请求超时,请求以后多久未响应算是超时(毫秒)
    import axios from "axios"
    // 配置公共数据
    axios.defaults.baseURL = "XXXX";
    // 合并两个请求,并处理响应成功或失败
    axios.all([
      axios.get("XXXX"),
      axios.post("XXX", "XXX=XXX", {})
    ])
    .then(axios.spread((res1, res2)=>{
      // 两个请求都成功
    }))
    .cath((error)=>{
      // 任何一个失败
      console.log(error)
    })
    
    // 覆盖请求头
    axios.defaults.headers = {}
    // 修改请求头
    axios.defaults.headers.accept = "XXX"
    // 修改请求参数
    axios.post("add", "name=jack", {
      timeout: 1000,
      transformRequest: function (data) {
        // 加工请求体数据
        return "name=rose";
      }
    })
    // 修改响应数据
    axios.get("XXX",{
      params: {
        id: 1
      },
      transformResponse: function(data) {
        data = "XXX";
        return data;
      }
    })
    
    // 允许携带cookie
    withCredentials: true
    

    上传进度

    let fd = new FormData();
    let file;
    //获取到页面中的<input type='file' @change='changeFile'/>
    // ...<methords>
    // changeFile (e) {
    //   file = e.target.files[0]
    // }
    // ...
    fd.append("file", file)
    axios.post("/upload", fd, {
      onUploadProgess: (progessEvent) => {
        let rate = (progessEvent.loaded / progessEvent.total)*100
      }
    })
    

    取消请求

    const CancelToken = axios.CancelToken;
    const source = CancelToken.source();
    // ...<data>
    // this.source = source;
    // ...
    
    // ...<methords>
    // cancel() {
    //   this.source.cancel();//取消到之前的那个请求
    // }
    // ...
    
    // options配置请求取消关联
    cancelToken: source.token,
    

    断点续传

    // 前端及时获取当前文件的大小,存储起来
    let file = <input type="file" />.files[0].slice(文件开始部分, 文件结尾部分);
    let fd = new FormData().append("file", file);
    // 后端:多次接收文件,都往同一个文件上追加
    
  • 相关阅读:
    BZOJ 1854 [Scoi2010]游戏
    【模板】二分图匹配-匈牙利算法
    BZOJ 1432 [ZJOI2009]Function
    BZOJ 1192 [HNOI2006]鬼谷子的钱袋
    BZOJ 1088 [SCOI2005]扫雷Mine
    BZOJ 1047 [HAOI2007]理想的正方形
    BZOJ 1034 [ZJOI2008]泡泡堂BNB
    BZOJ 1022 [SHOI2008]小约翰的游戏John
    LOJ 6278 数列分块入门2
    【BZOJ 1003】[ZJOI2006]物流运输(Dijkstra+DP)
  • 原文地址:https://www.cnblogs.com/haozehua/p/10222191.html
Copyright © 2020-2023  润新知