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>
相关推荐
MoSTChillax7 分钟前
UI规范设计:从视觉到交互的全面指南
前端·ui·产品经理·设计规范·vibecoding
雪碧聊技术29 分钟前
Vue + Element Plus 实现文本溢出显示省略号及悬浮提示
前端·javascript·css·vue.js·文本溢出省略
eric-sjq31 分钟前
0.6B 前端生成模型本地部署实战:消费级显卡跑通 WanlyFrontend 全流程
前端·本地部署
小妖6661 小时前
设置了 box-sizing: border-box; 不管用,下边框还是被挤压没了
前端·css·html
雪隐2 小时前
个人电脑玩AI-16让5060 Ti给你打工——5060Ti 16G 跑 MiniMax-Music-3:从下载到 60s 出歌的全流程
前端·人工智能·后端
CAD老兵3 小时前
让 AI Coding Agent 直接访问 CAD 文档:GitMCP 实战指南
前端·人工智能·github
程序员鱼皮3 小时前
DeepSeek Harness 最新邪修曝光!被吹成核弹的极简模式,真的夯吗?
前端·后端·ai编程
无己心4 小时前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
袅沫4 小时前
Nginx中部署多个前端项目——区分路径
服务器·前端
Asize4 小时前
为什么写代码前要先规划组件树?Next.js + Redis 笔记系统实战
前端·javascript·next.js