zoukankan      html  css  js  c++  java
  • axios

    特点:

    1 从浏览器创建XMLHttpRequests

    2 从node.js创建http请求

    3 支持Promise API

    4 拦截请求和响应

    5 转换请求和响应的数据

    6 取消请求

    7 自动转换JSON数据

    8 客户端支持预防XSRF

     Axios是一个基于promise的HTTP库,可以用于浏览器和node.js

    vue-cli3,生成的项目,public就是根目录,实际上访问的就是public下的index.htm,所在在

    public下的文件需要访问,直接/文件名 就可以了

    axios请求的方法常见有5种

    :get post put delete patch

    get:获取数据

    post:提交数据  表单提交,文件上传

    put:更新数据(所有数据推送到后端)

    patch:更新数据(只将修改的数据推送到后端)

    delete:删除数据

    post 有content-type     

    form-data  表单提交 文件上传 图片上传

    需要使用FormData 将数据转化程度能够formData格式

    let formData=new FormData();

    for(let key in data){formData.append(key,data[key])}

    applicition/json

    并发请求:同时进行多个请求,并统一处理他们的返回值

    axios.all() axios.spread()

    axios.all() 参数是数组,请求方法,所有请求都成功之后执行回调函数axios.spread()

    demo:

    axios.all([axios.get(url1),axios.get(url2),axios.get(url3)]).then(

    axios.spread((data1,data2,data3)=>{//执行回调函数spread,有一个请求就有几个返回值

    })

    );

    axios实例   axios.create()

    用处:多个后台接口域名  超时时长不一样

    axios参数配置

    baseURL:请求的域名,基本地址

    timeout:设置请求的超时时长,单位是毫秒(ms)

    url:请求的路径

    method:请求的方法

    headers:{}设置请求头 ,比如token

    params:{},//请求参数拼在url上

    data:{}请求参数放在请求体中

    1 axios全局配置  用的比较少

    2 axios实例配置   实际开发中,都会声明一个实例,在实例中进行配置

    3 axios请求配置

    1 全局配置

    axios.defaults.timeout=1000;

    axios.defaults.baseURL="xxxxxxxx";

    2 实例配置

    let instance=axiso.create();

    instance.defaults.timeout=3000;

    3 请求配置

    instance.get(url,{timeout:5000}).then().catch()

    优先级:1 2 3 由低到高

    拦截器

    在请求或响应被处理前拦截它们

    请求拦截器 响应拦截器

    axios.interceptors.request.use(config=>{//爱发送请求前做些什么return config},err=>{return Promise.reject(err)})

    axios.interceptors.response.use(res=>{//请求成功对响应数据做处理return res;},err=>{//响应错误做些什么 return Promise.reject(err)})

    请求错误:请求没有发送到后台出现的错误

    响应错误:发送到后台,出现的错误

    取消拦截器(了解)

    let interceptors=axios.inerceptors.request.use(config=>{},err=>{})

    axios.interceptors.request.eject()

    错误处理:请求错误和响应错误都会进入catch

    404 请求没有找到 401 请求超时

    响应错误以5开头的

    500 系统错误 502 系统重启

    在实际开发中,一般添加统一错误处理

    就是使用请求和响应拦截器

    取消请求:

    用于取消正在进行的http请求(了解)

    需要在发送的请求中带上取消请求的token参数

    demo:

    let source=axios.CancelToken.source();

    axios.get().then(res=>{

    console.log(res)

    }).catch(err=>{//请求取消之后进入catch

    })

    //取消请求(message会被cancel捕获)

    source.cancel('cancel http')

    //什么情况下可能用到取消请求

    在请求数据时间比较长,需要取消请求的地方会用到

    axios封装:

    demo:

    第一步:将所有的请求放在一个文件中

    1.1 新建service文件键,新建url.js

    const urlList={
        getList:{
            url:'/getList',
            method:'get'
        },
        saveList:{
            url:'',
            method:'post'
        },
        updataList:{
            url:'',
            method:'post'
        },
    };
    export default urlList;

    1.2 新建http.js ,新建axios实例,时间request和response的过滤,通过for循环实现不同的请求方法

    import urlList from './url.js'
    import axios from 'axios'
    let instance=axios.create({
        baseURL:'http://localhost:8081',
        timeout:1000
    });
    instance.interceptors.request.use(config=>{
        return config;
    },err=>{
        console.log(err);
    })
    instance.interceptors.response.use(res=>{
        return res;
    },err=>{
        console.log(err);
    })
    const Http={};//包装请求方法的容器
    // 循环遍历输出不同的请求方法
    for(let i in urlList){
        // 使用async await的原因,避免进入回调地狱,
        //使用回调的弊端:一个请求的参数依赖于另一个请求的返回值,就需要在回调函数中执行另一个请求,如果这样的依赖比较多就会陷入回调地狱,使用async await 可以直接按正常代码进行书写,看着更规范易懂
        Http[i]=async function(params,isFormata=false,config={}){
            let api=urlList[i];
            let res=null;
            let newParams=params;
            if(api.method=="post"||api.method=='put'||api.method=='patch'){
                try{
                    res=await instance[api.method](api.url,newParams,config);
                }catch(err){
                    res=err;
                }
               
            }else{
                config.params=newParams;
                try{
                    res=await instance[api.method](api.url,config);
                }catch(err){
                    res=err;
                }
            }
            return res;
            
        }
    }
    export default Http;

    第二步:在main,js中注册http为vue的全局变量

    import Http from './service/http'
    Vue.prototype.$http=Http;

    第三步:使用(要与封装的方法一直,使用async 和await)

    async getList(){
            let res=await this.$http.getList();
      }
  • 相关阅读:
    fabric-byfn.sh名利解析
    Hyperledger Fabric--byfn.sh 命令分析
    ubuntu修改网络地址
    docker常用命令
    添加daocloud加速器-18.04.2-Ubuntu
    CA/RA简介
    Redhat防火墙
    Linux上Oracle 11g启动与关闭
    redhat网络配置文件详解
    uva1349Optimal Bus Route Design
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/11276061.html
Copyright © 2011-2022 走看看