axios的基本使用和封装

axios的基本使用

// get 请求
axios.get('api/index.json',{
  params: {}
}).then(res => {}).catch(err => {})
// post 请求
axios.post('/api/getUserInfo', {
  data: {}
}).then(res => {}).catch(err => {})
// 并发请求
axios.all([
  axios.get('/api/index.json'),
  axios.get('/api/getUser.json')
]).then(axios.spread((indexJson, userJson) => {
    // indexJson 第一个接口返回的数据
   //  userJson 第二个接口返回的数据
  })
)

axios的全局配置

axios.defaults.timeout = 1000

axios 实例配置

let instance = axios.creat({
  timeout: 1000, // 请求的超时时长
  baseURL: 'http://localhost:8080', // 请求的基本域名地址
  url: '/api/getUser', // 请求地址
  data: {}, // post请求入参
  params: {}, //get 请求入参
  headers: {} // 设置请求头
})

axios 拦截器

// 请求拦截器
let instance = axios.interceptors.request.use(config => {
  //   请求前做些什么
  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截器
let instance = axios.interceptors.response.use(res => {
  // 响应成功对数据做些什么
  return res
}, err => {
  return Promise.reject(err)
})
// 取消拦截器 (一般不用)
 axios.interceptors.request.eject(instance)   

取消请求

let source = axios.CancelToken.source()
    axios.get('/index.json', {
     cancelToken: source.token
   }).then(res => {
     console.log(res)
   }).catch(err => {
     console.log(err)
   })
   // source.cancel(message) 参数message 可选填
   source.cancel('http get cancel')

axios 的封装

 import axios from 'axios'
import { baseURL } from '@/config/index.js'
class HttpRequest {
  constructor (baseUrl = baseURL) {
    this.baseUrl = baseUrl
     // 队列
    this.query = {}
   }
  // 全局参数
  getinSidConfig () {
    const config = {
      baseUrl: this.baseUrl,
      headers: {}
    }
    return config
  }
 // 请求方法
 request (options) {
    const instance = axios.create()
    options = Object.assign(this.getinSidConfig(), options)
    this.interceptors(instance, options.url)
    return instance(options)
  }
    // 拦截器
  interceptors (instance, url) {
    instance.interceptors.request.use(config => {
      // 使用队列的方式处理如果是第一个到最后一个请求了则增加loding
      // 以防出现多个loding层样式错误
      if (!Object.keys(this.query).length) {
        // Spin.show()
      }
      this.query[url] = true
      return config
    }, err => {
      return Promise.reject(err)
    })
    instance.interceptors.response.use(res => {
      delete this.query[url]
      const {data, status} = res
      return {data, status}
    }, err => {
      return Promise.reject(err)
    })
  }
}
export default HttpRequest
// 用法
import axios from './index'
export const getUserInfo = () => {
  return axios.request({
    url: '/getUserInfo',
    methods: 'get'
  })
}
// home.vue
created () {
    getUserInfo().then(res => {
        console.log(res)
   })
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 是目前最新的 Vue 版本,相信很多人都在使用它。而 axios 则是一个非常优秀的 HTTP 库,已成为前端开发中不可或缺的一部分。在 Vue 3 中使用 axios,我们可以将其进行封装以方便调用。 以下是一个简单的 axios 封装示例: ```javascript import axios from 'axios' const instance = axios.create({ baseURL: 'https://api.example.com', timeout: 10000 }) instance.interceptors.request.use( config => { // 在请求发送之前做些什么 return config }, error => { // 对请求错误做些什么 return Promise.reject(error) } ) instance.interceptors.response.use( response => { // 对响应数据做些什么 return response }, error => { // 对响应错误做些什么 return Promise.reject(error) } ) export default instance ``` 在上面的代码中,我们首先使用 `axios.create()` 方法创建了一个 axios 实例,并设置了基本的配置信息,包括请求的基础 URL 和超时时间。 接下来,我们使用 `instance.interceptors.request.use()` 方法添加了一个请求拦截器,用于在请求发送之前做一些自定义的操作,比如添加请求头、修改请求参数等。同样的,我们还可以使用 `instance.interceptors.response.use()` 方法添加一个响应拦截器,在接收到响应数据之后对其进行处理。 最后,我们将封装好的 axios 实例导出,以便在项目中使用。 下面是一个使用封装后的 axios 实例的例子: ```javascript import axios from '@/utils/axios' export function getUserInfo(id) { return axios({ url: '/user/info', method: 'get', params: { id } }) } ``` 在上面的代码中,我们使用 `import` 导入了封装后的 axios 实例,并使用 `axios()` 方法发送了一个 GET 请求,其中包含了请求的 URL、请求方法和请求参数。在这个例子中,我们请求了用户信息,并将用户 ID 作为参数传递给了后端。 这就是一个简单的 axios 封装示例,当然,实际项目中可能会有更多的配置和自定义操作。但是不管怎样,通过 axios 封装,我们可以让我们的项目更加规范、易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值