axios封装

axios

一、axios

1、安装

CDN 方式

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

npm 方式

npm install axios --save

yarn 方式

yarn add axios --save

与 vue-axios 插件一起安装

vue-axios 是将 axios 集成到 Vue.js 的轻度封装,本身不能独立使用

npm install axios vue-axios

在 main.js 中使用

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios' // 导入 axios
import VueAxios from 'vue-axios' // 导入 vue-axios

const app = createApp(App)

app.use(store)
app.use(router)
// 注意这里要将 VueAxios 放在前面,否则报错 Maximum call stack size exceeded
app.use(VueAxios, axios)
app.mount('#app')

2、基本使用

配置封装 config-util.js

export default {
  baseUrl: {
    // 开发环境
    dev: 'xxx',
    // 生产环境
    prod: 'xxx'
  }
}

请求封装 http-util.js

拦截器根据需要

import axios from 'axios' // 引入axios
import config from '@/api/utils/config-util.js' // 引入配置文件

const instance = axios.create({
  baseURL: config.baseUrl.dev,
  timeout: 60000
})

// 请求拦截器
instance.interceptors.request.use(function (config) {
  console.log('发请求之前', config)
  return config
}, function (error) {
  console.log('请求错误', error)
  return Promise.reject(error)
})

// 响应拦截器
instance.interceptors.response.use(function (response) {
  console.log('得到的响应数据', response)
  return response
}, function (error) {
  console.log('响应错误', error)
  return Promise.reject(error)
})

// get请求
export function get (url, data = {}) {
  return new Promise((resolve, reject) => {
    instance
      .get(url, {
        params: data
      })
      .then((response) => {
        resolve(response)
      })
      .catch((err) => {
        reject(err)
      })
  })
}

// post请求
export function post (url, data = {}) {
  return new Promise((resolve, reject) => {
    instance.post(url, data).then(
      (response) => {
        resolve(response.data)
      },
      (err) => {
        reject(err)
      }
    )
  })
}

返回数据封装 return-util.js

个人写的,不专业

// 工具类
// 返回请求结果
export const returnMsg = async promise => {
  try {
    const res = await promise
    if (res.status === 200) {
      return res.data
    } else {
      return 'no 200 !'
    }
  } catch (e) {
    console.log(e.name + '====' + e.message)
    if (e.message.indexOf('404') !== -1) {
      return '404'
    }
    return 'error'
  }
}

测试 api

import { get, post } from '@/api/utils/http-util.js'
import { returnMsg } from '@/api/utils/return-util.js'

export const getHomeData = async data => await returnMsg(get('hello', data))

export const getHomeData02 = data => post('hello', data)

使用演示

<template>
  <div>
    主页面
    <h1>{{ str }}</h1>
  </div>
</template>

<script>

import { getHomeData } from '@/api/test-api.js'
import { ref, onMounted } from 'vue'

export default {
  setup () {
    const str = ref('默认值')
    onMounted(async () => {
      const data = await getHomeData(null)
      str.value = data
    })
    return { str }
  }
}
</script>

<style>

</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值