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>
相关推荐
小小小小宇2 小时前
虚拟列表兼容老DOM操作
前端
悦悦子a啊2 小时前
Python之--基本知识
开发语言·前端·python
安全系统学习3 小时前
系统安全之大模型案例分析
前端·安全·web安全·网络安全·xss
涛哥码咖4 小时前
chrome安装AXURE插件后无效
前端·chrome·axure
OEC小胖胖4 小时前
告别 undefined is not a function:TypeScript 前端开发优势与实践指南
前端·javascript·typescript·web
行云&流水4 小时前
Vue3 Lifecycle Hooks
前端·javascript·vue.js
Sally璐璐4 小时前
零基础学HTML和CSS:网页设计入门
前端·css
老虎06274 小时前
JavaWeb(苍穹外卖)--学习笔记04(前端:HTML,CSS,JavaScript)
前端·javascript·css·笔记·学习·html
灿灿121385 小时前
CSS 文字浮雕效果:巧用 text-shadow 实现 3D 立体文字
前端·css
烛阴5 小时前
Babel 完全上手指南:从零开始解锁现代 JavaScript 开发的超能力!
前端·javascript