Axios二次封装

安装axios

bash 复制代码
pnpm i axios

创建 request.ts

/src/utils/request.ts

ts 复制代码
/**
 * @description axios二次封装: 请求拦截器,响应拦截器
 */
import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API, // api 的 base_url, 从文件.env.development或.env.production中读取
  timeout: 5000 // 请求超时时间
})
// 请求拦截器
request.interceptors.request.use(config => {
  return config
})
// 响应拦截器
request.interceptors.response.use((response) => {
  // 响应成功, 返回响应数据(简化数据)
  return response.data
}, (error) => {
  console.log("error", error)
  // 响应失败, 返回错误信息(处理http网络错误)
  const statusCode: number = error.response.status
  if (error && error.response) {
    switch (statusCode) {
      case 400:
        error.message = '请求错误'
        break
      case 401:
        error.message = '未授权,请重新登录'
        break
      case 403:
        error.message = '拒绝访问'
        break
      case 404:
        error.message = `请求地址出错: ${error.response.config.url}`
        break
      case 408:
        error.message = '请求超时'
        break
      case 500:
        error.message = '服务器内部错误'
        break
      default:
        error.message = '网络异常'
        break
    }
    ElMessage.error(error.message)
  }
  return Promise.reject(error)
})
// 对外暴露
export default request

.env.development

txt 复制代码
# 开发环境配置
ENV = 'development'

# 页面标题
VITE_APP_TITLE = 'vue3-ts-demo'
# 开发环境
VITE_APP_BASE_API = '/dev-api'

使用测试

xxx-vue

html 复制代码
<template>
  <div class="home">
    <h2>home</h2>    
  </div>
</template>

<script setup lang="ts">
import { onMounted } from 'vue'
import request from '@/utils/request'
// 组件实例被挂载到 DOM 上后执行
onMounted(() => {
  request({
    url: '/user/login',
    method: 'post',
    data: {
      username: 'admin',
      password: '111111',
    },
  }).then(res => {
    console.log(res.data)
  })
})
</script>

<style scoped>

</style>
相关推荐
excel42 分钟前
Nuxt 中 useSeoMeta 与 useHead 的区别
前端
竹林8181 小时前
OmniGame 技术白皮书:从零依赖到 WebRTC P2P,重新定义网页小游戏的工程上限
前端·浏览器
ss2731 小时前
AI全栈实战 | 2.1-02 CSS 布局:垂直居中为什么是经典面试题?所有布局在解决什么矛盾
前端·css
律宏阔1 小时前
Flutter Riverpod 3:统一打印 Provider 错误与自动重试日志
前端·flutter
周洲08301 小时前
STM32片内Flash读写深度详解|掉电参数保存、底层原理
linux·前端·stm32
data analyse 4561 小时前
埋点工具的私有化部署成本高吗?
前端·数据分析·github
data analyse 4562 小时前
埋点工具的埋点查询语言难学吗?
前端·数据分析
DianSan_ERP2 小时前
多平台订单自动下载与回传的技术实现:从消息推送到状态闭环引言
java·linux·服务器·前端·网络·架构·自动化
恋猫de小郭2 小时前
Shopify 回应为什么从 RN 回到原生,为什么不用 KMP ?
android·前端·flutter
小蜗 strong3 小时前
和电脑猜拳(随机程序应用)
服务器·前端·python