• axios使用初涉


    看vue的时候,vue2.0推荐使用axios做http请求,今天就学一下axios基本使用。

    安装 axios

    推荐npm方法(npm是node.js环境下的包管理器):

    npm install axios  

    非常任性,只推荐这一种安装方法,强迫乃们使用这种便捷的方式。觉得npm慢?或者根本无回应?下面教大家更换电脑源npm。

    目前接触到最多的就是淘宝npm镜像: http://npm.taobao.org/ 

    镜像,我的理解是复制了一份国外源地址的代码等到自己的国内服务器,并且及时更新,这样用户去国内服务器访问即可加快访问速度。(不知道理解的对不对,欢迎指正)

    安装淘宝镜像定制命令cnpm

    $ npm install -g cnpm --registry=https://registry.npm.taobao.org  

    $ cnpm install [模块名称] //安装模块

    $ cnpm sync connect //同步模块

    //支持npm除了publish之外的所有命令

    so,第一步的安装axios你可以换成:

    cnpm install axios

    axios基本用法:

     axios get请求之参数写在链接里:

    axios.get('http://p.haoservice.com/Utility/GetProductList?key=8682dcb1b5c5488d84c10eb1767de0c5')
              .then(function (res) {
                console.log("请求成功:"+JSON.stringify(res))
              })
              .catch(function (error) {
                console.log("请求失败:"+JSON.stringify(error))
              })

    axios get请求之参数写在params里:

    axios.get('http://p.haoservice.com/Utility/GetProductList',{
                params:{
                    key:'8682dcb1b5c5488d84c10eb1767de0c5'
                }
            })
              .then(function (res) {
                console.log("请求成功:"+JSON.stringify(res))
              })
              .catch(function (error) {
                console.log("请求失败:"+JSON.stringify(error))
              })

    axios post请求:

    axios.post('http://p.haoservice.com/Utility/GetProductList',{
                key:'8682dcb1b5c5488d84c10eb1767de0c5'
            })
              .then(function (res) {
                console.log("请求成功:"+JSON.stringify(res))
              })
              .catch(function (error) {
                console.log("请求失败:"+JSON.stringify(error))
              })

    axios 自己配置参数生成请求:

    axios({
        method:'post',//方法
        url:'/user/12345',//地址
        data:{//参数
            firstName:'Fred',
            lastName:'Flintstone'
        }
    });

    多重并发请求(这个厉害):

    function getUserAccount(){
        return axios.get('/user/12345');
    }
    
    function getUserPermissions(){
        return axios.get('/user/12345/permissions');
    }
    
    axios.all([getUerAccount(),getUserPermissions()])
        .then(axios.spread(function(acc,pers){ //spread方法相当于拆分数组
            //两个请求现在都完成
            console.log(acc)
    console.log(pers) }));

    axios提供的请求方式(对照上面的几个实例,config配置信息:一个对象包含key:value格式的配置参数):

    axios.request(config)
    axios.get(url[,config])
    axios.delete(url[,config])
    axios.head(url[,config])
    axios.options(url[,config])
    axios.post(url[,data[,config]])
    axios.put(url[,data[,config]])
    axios.patch(url[,data[,config]])

    axios提供的多重并发方法(参考上面实例):

    axios.all(iterable)
    axios.spread(callback)

    axios 配置参数列表:

    {
    // 请求地址
    url: '/user',
    // 请求类型
    method: 'get',
    // 请根路径
    baseURL: 'http://www.mt.com/api',
    // 请求前的数据处理
    transformRequest:[function(data){}],
    // 请求后的数据处理
    transformResponse: [function(data){}],
    // 自定义的请求头
    headers:{'x-Requested-With':'XMLHttpRequest'},
    // URL查询对象
    params:{ id: 12 },
    // 查询对象序列化函数
    paramsSerializer: function(params){ }
    // request body
    data: { key: 'aa'},
    // 超时设置s
    timeout: 1000,
    // 跨域是否带Token
    withCredentials: false,
    // 自定义请求处理
    adapter: function(resolve, reject, config){},
    // 身份验证信息
    auth: { uname: '', pwd: '12'},
    // 响应的数据格式 json / blob /document /arraybuffer / text / stream
    responseType: 'json',
     
    // xsrf 设置
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
     
    // 下传和下载进度回调
    onUploadProgress: function(progressEvent){
    Math.round( (progressEvent.loaded * 100) / progressEvent.total )
    },
    onDownloadProgress: function(progressEvent){},
     
    // 最多转发数,用于node.js
    maxRedirects: 5,
     
    // 最大响应数据大小
    maxContentLength: 2000,
    // 自定义错误状态码范围
    validateStatus: function(status){
    return status >= 200 && status < 300;
    },
    // 用于node.js
    httpAgent: new http.Agent({ keepAlive: treu }),
    httpsAgent: new https.Agent({ keepAlive: true }),
     
    // 用于设置跨域请求代理
    proxy: {
    host: '127.0.0.1',
    port: 8080,
    auth: {
    username: 'aa',
    password: '2123'
    }
    },
    // 用于取消请求
    cancelToken: new CancelToken(function(cancel){})
    }

    axios 响应数据:

    {
      // 服务器回应的数据将被包在data{}中,这点需要注意
      data: {},
     
      // `status` is the HTTP status code from the server response
      status: 200,
     
      // `statusText` is the HTTP status message from the server response
      statusText: 'OK',
     
      // `headers` the headers that the server responded with
      // All header names are lower cased
      headers: {},
     
      // `config` is the config that was provided to `axios` for the request
      config: {},
     
      // `request` is the request that generated this response
      // It is the last ClientRequest instance in node.js (in redirects)
      // and an XMLHttpRequest instance the browser
      request: {}
    }

    axios请求数据格式(较为关键的一点):

    //axios串联js对象为JSON格式。为了发送application/x-wwww-form-urlencoded格式数据
    
    //浏览器中使用URLSearchParams
    var params = new URLSearchParams();
    params.append('param1','value1');
    params.append('param2','value2');
    axios.post('/foo',params);
    //使用qs格式化数据
    var qs = require('qs');
    axios.post('/foo', qs.stringify({'bar':123}));

    更多详细用法,官方文档写的灰常灰常详细,不必乱找资料。 官网传送门: https://www.npmjs.com/package/axios

    一片不错的文档翻译: https://segmentfault.com/a/1190000008470355?utm_source=tuicool&utm_medium=referral

  • 相关阅读:
    LeetCode 516. Longest Palindromic Subsequence
    LeetCode 432. All O`one Data Structure
    LeetCode 450. Delete Node in a BST
    LeetCode 460. LFU Cache
    LeetCode 341. Flatten Nested List Iterator
    LeetCode 381. Insert Delete GetRandom O(1)
    LeetCode 380. Insert Delete GetRandom O(1)
    LintCode Coins in a Line III
    LintCode Coins in a Line II
    LintCode Coins in a Line
  • 原文地址:https://www.cnblogs.com/hongdiandian/p/8423467.html
Copyright © 2020-2023  润新知