网络模块封装-axios

本文详细介绍了axios的使用,包括基本用法、并发请求、全局配置、实例和模块封装。通过实例展示了如何创建自定义配置的axios实例,并探讨了axios拦截器在处理请求和响应时的应用。
摘要由CSDN通过智能技术生成

axios

功能特点:

  • 在浏览器中发送XMLHttpRequests 请求
  • 在node.js中发送http请求
  • 支持Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 等等

axios框架的基本使用

npm install axios --save

import axios from 'axios'
// config对象类型
// axios(config)最基本的使用
// 本身可以返回Promise数据
// 1.基本使用
axios({
  // 服务器
  url:'http://123.207.32.32:8000/home/multidata',
  //get请d
  method:'get'
}).then(res => {
  console.log(res);
})

axios发送并发请求

格式:数组

axios.all([axios(), axios()]).then(result => {

})
axios.all([axios({
  url: '/home/multidata'
}), axios({
  url:'http://123.207.32.32:8000/home/data',
    // 专门针对get请求的参数拼接 
  params: {
    type: 'sell',
    page: 4
  }
})]).then(results => {
    console.log(results);
    console.log(results[0]);
    console.log(results[1]);
  })

另一种写法:
在这里插入图片描述

axios的全局配置信息相关

使用全局的axios和配置在进行网络请求
axios的配置相关信息

 axios.defaults.baseURL = 'http://123.207.32.32:8000'
 axios.defaults.timeout = 5000

axios的实例和模块封装

为什么要创建axios的实例呢?

  • 当我们从axios模块中导入对象时,使用的实例是默认的实例
  • 当给该实例设置一些默认配置时,这些配置就被固定下来了
  • 但是后续开发中,某些配置可能会不太一样
  • 比如某些请求需要使用特定的baseURL或者timeout或者content-Type等
  • 这个时候,我们就可以创建新的实例,并且传入属于该实例的配置信息

创建对应的axios的实例

const instance1 = axios.create({
  baseURL:'http://123.207.32.32:8000',
  timeout: 5000
})

使用创建的axios实例:

instance1({
  url:'/home/multidata'
}).then(res => {
  console.log(res)
})     

instance1({
  url:'/home/data',
  params: {
    type:'pop',
    page: 1
  }
}).then(res => {
  console.log(res)
})

创建另外一个实例:

const instance2 = axios.create({
  baseURL:'',
  timeout: 10000,
  headers: {}
})

对实例进行模块封装

在这里插入图片描述
1.

 export function request(config, success, failure) {
   // 1.创建axios的实例
  const instance1 = axios.create({
     baseURL:'htto://123.207.32.32:8000',
     timeout: 5000
  })
  // 发送真正的网络请求
  instance1(config)
   .then(res => {
     // console.log(res);
    success(res)
   })
   .catch(err => {
     // console.log(err);
     failure(err)
   })
 }
// 5.封装request模块
import {request} from './network/request'

request({
  url:'/home/multidata'
}, res => {
  console.log(res)
}, err => {
  console.log(err)
})
export function request(config) {
  // 1.创建axios的实例
  const instance1 = axios.create({
    baseURL:'htto://123.207.32.32:8000',
    timeout: 5000
  })
  // 发送真正的网络请求
  instance1(config.baseConfig)
  .then(res => {
    // console.log(res);
    config.success(res)
  })
  .catch(err => {
    // console.log(err);
    failure(err)
  })
}
request({
  baseConfig: {

  },
  success: function (red) {
    
  },
  failure: function (err) {

  }
})

3.最终方案:使用promise

export function request(config) {
 return new Promise((resolve, reject) => {
      // 1.创建axios的实例
    const instance1 = axios.create({
      baseURL:'htto://123.207.32.32:8000',
      timeout: 5000
    })
    // 发送真正的网络请求
    instance1(config)
    .then(res => {
      resolve(res)
    })
    .catch(err => {
      reject(err)
    })
  })
}
request({
  url:'/home.multidata',
}).then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

axios拦截器的使用

export function request(config) {
       // 1.创建axios的实例
     const instance1 = axios.create({
       baseURL:'htto://123.207.32.32:8000',
       timeout: 5000
     })
      //  2.axios的拦截器
      instance1.interceptors.request.use(config => {
        console.log(config)
        // 2.1拦截请求的作用
        // 1.比如说config中的一些信息,不符合服务器的要求

        // 2.比如每次发送网络请求时,都希望在界面中显示一个请求的图标

        // 3.某些网络请求(比如登陆(token)),必须携带一些特殊的信息

        // 拦截下来要还回去
        return config
        // 2.2响应拦截
      }, err => {
        console.log(err)
      })
      instance1.interceptors.response.use(res => {
        console.log(res)
        return res.data
      },err => {
        console.log(err)
      })
     // 3.发送真正的网络请求
    //  本身返回的就是promise
     return instance1(config)
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值