zoukankan      html  css  js  c++  java
  • Vue:Axios发送网络请求

    axios

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

    http://www.axios-js.com/zh-cn/docs/

    安装

    npm install axios --save
    

    使用

    发送Get请求- 不带参数

    import axios from 'axios'
    
    // 发送请求, 默认为get请求
    axios({
      url: "http://49.232.203.244:8001/v1/link",
    }).then(res => {
      console.log(res);
    })
    

    发送Get- 带查询参数

    // get 请求带查询参数
    axios({
      url: "http://49.232.203.244:8001/v1/post",
      params: {
        limit: 10,
        page: 1
      }
    }).then(res => console.log(res));
    

    发送post请求

    // post 请求
    axios({
      url: "http://49.232.203.244:8001/v1/auth",
      method: "post",
      data: {
        username: "yan22",
        password: "S$V0CLeH_$"
      }
    }).then(res => console.log(res))
    

    并发请求

    // 发送多个请求(并发)
    axios.all([
      axios({
        url: "http://49.232.203.244:8001/v1/link",
      }),
      axios({
        url: "http://49.232.203.244:8001/v1/post",
        params: {
          limit: 10,
          page: 1
        }
      })
    ]).then(results => {
      console.log(results)
    })
    

    响应结构示例

    image-20210310125626071

    全局配置

    // 配置默认 url
    axios.defaults.baseURL = "http://49.232.203.244:8001"
    // 配置超时时间 5s
    axios.defaults.timeout = 5000
    
    axios({
      url: "/v1/link" // 最终访问的地址为: baseURL + url
    }).then(res => console.log(res))
    

    axios实例

    解决在一个项目中,需要调用多台服务器上的接口服务问题

    // axios实例, 解决一套项目接口部署到多台服务器上
    
    const instancel = axios.create({
      baseURL: "http://49.232.203.244:8001",
      timeout: 3000
    })
    
    instancel({
      url: "/v1/link"
    }).then(res => console.log(res))
    
    
    const instancel9001 = axios.create({
      baseURL: "http://49.232.203.244:8000"
    })
    
    instancel9001({
      url: "/message",
      params: {
        page: 1
      }
    }).then(res => console.log(res))
    

    网络请求封装

    network/request.js

    import axios from 'axios'
    
    export function request(config){
        // 创建axios实例
        const instance = axios.create({
            baseURL: "http://49.232.203.244:8001",
            timeout: 5000
        })
    
        // 发送真正的网络请求
        return instance(config)
    }
    

    使用其来发送请求

    import {request} from '../src/network/request'
    
    // 使用封装的axios 发送请求
    request({
      url: "/v1/link",
    }).then(res => console.log(res))
    .catch(err => console.log(err))
    

    拦截器

    请求/响应后 进行处理

    如: 添加header,loading 图标,token 校验

    import axios from 'axios'
    
    export function request(config){
        // 创建axios实例
        const instance = axios.create({
            baseURL: "http://49.232.203.244:8001",
            timeout: 5000
        })
    
        // axios 拦截器
        instance.interceptors.request.use(config => {
            // 请求成功
            console.log(config)
            // 拦截之后需要把配置返回出去
            return config
        }, err => {
            // 失败
            console.log(err)
        })
    
        // 响应拦截器
        instance.interceptors.response.use(res => {
            console.log(res)
            // 拿到接口实际返回的内容
            return res.data
        }, err => {
            console.log(err)
        })
    
        // 发送真正的网络请求
        return instance(config)
    }
    

    image-20210310134721432

    源码地址

    gitee: https://gitee.com/zy7y/hello-fast-api-vue

    作者:zy7y
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    vuecli3.0 优雅使用svg
    解决vueRouter 跳转相同路由报错
    vue项目中使用 web worker 开启多线程
    项目经常使用的common.js 方法
    vue实现3D词云
    怎么禁止用户点击f12查看数据,查看网页代码,布局样式
    1:vue项目优化总结
    手写一个发布订阅
    vue3.0 reactive 理解
    ifram父子组件传参
  • 原文地址:https://www.cnblogs.com/zy7y/p/14511197.html
Copyright © 2011-2022 走看看