vue3+ts封装axios实例以及解决跨域问题

 更新时间:2024年09月18日 10:01:23   作者:韭菜盖饭  
在前端开发中,使用axios进行数据请求是常见的做法,封装axios可以统一请求头处理、方便接口管理、配置多拦截器等,提高代码的可维护性和重用性,本文详细记录了axios的封装过程,包括安装、配置跨域处理、接口管理文件的创建等

一、前言

前端请求后端数据时,会用到axios,但是如果不将axios封装好,会导致代码冗余

二次封装的好处如下:

  • 求头能统一处理
  • 便于接口的统一管理
  • 解决回调地狱
  • 配置拦截器,给不同的实例配置不同的拦截器,支持以对象形式接受多个拦截器配置

因此,在这里记录一下axios的封装过程。

二、封装axios

安装axios

npm install axios

在目录/src/utils下创建一个http的文件夹

request.ts文件内容如下:

import axios from 'axios';

// 创建 axios 实例
const instance = axios.create({
  baseURL: 'http://127.0.0.1:4008/api/', // API 基础路径
  timeout: 100000, // 请求超时时间
  headers:{
	'Content-Type': 'application/json;charset=UTF-8',
  }
});

// 请求拦截器
instance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么,例如添加token
    // config.headers['Authorization'] = 'Bearer your-token';
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  response => {
    // 对响应数据做点什么
    return response;
  },
  error => {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

export default instance;

api.ts文件如下:

import http from './request'

export const generateVoice = (params:any) => {
  return http.request({
    method: 'POST',
    url: '/generate_voice',
    headers: {
        'Content-Type': 'application/json'
      },
    data:JSON.stringify(params)
  })
}

api.ts文件的目的是为了方便管理接口,你可以把所有接口卸载这里,这样就会在后面调用时更加简洁

三、 解决跨域

vite.config.ts文件中添加如下配置

  server: {
    port: 4008,
    host: '0.0.0.0',
    proxy: {
      "/api": {
        target: "http://64.176.215.21:8000/",
        changeOrigin: false,
        ws: true,
        rewrite:(path) => path.replace(/^\/api/, "")
      }
    },
  },

注意 配置以上文件,你的接口就需要每次带上/api前缀

在request.ts文件中,我们已经做好了每次带上/api前缀的代码

 baseURL: 'http://127.0.0.1:4008/api/', // API 基础路径
 //or
 baseURL: '/api/', // API 基础路径

四、调用接口

没有使用api.ts的接口

axios.post('/generate_voice',param)
      .then(response => {
        console.log(response);
      })
      .catch(error => {
        console.error(error);
      });

使用api.ts封装好的接口

import {generateVoice} from '@/utils/http/api';

generateVoice(param)
  .then(response => {
    console.log("Voice generated successfully:", response.data);
  })
  .catch(error => {
    console.error("Error generating voice:", error);
  });

五、运行结果

可以看到控制台返回的乱码数据,表示我们请求后台成功了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3源码分析调度器与watch用法原理

    Vue3源码分析调度器与watch用法原理

    这篇文章主要为大家介绍了Vue3源码分析调度器与watch用法原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • vue 实现input表单元素的disabled示例

    vue 实现input表单元素的disabled示例

    今天小编就为大家分享一篇vue 实现input表单元素的disabled示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Vue.Js中的$watch()方法总结

    Vue.Js中的$watch()方法总结

    这篇文章主要给大家介绍了在Vue.Js中的$watch()方法的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 如何在vue项目中使用UEditor--plus

    如何在vue项目中使用UEditor--plus

    UEditor是由百度web前端研发部开发的所见即所得的开源富文本编辑器,这篇文章主要介绍了如何在vue项目中使用UEditor--plus ,需要的朋友可以参考下
    2022-08-08
  • Vue如何实现将后端返回二进制文件在浏览器自动下载

    Vue如何实现将后端返回二进制文件在浏览器自动下载

    Vue项目开发中,遇到界面下载功能时,前端如何实现将后端返回二进制文件在浏览器自动下载呢,本文就来和大家聊聊具体的解决方法吧
    2024-11-11
  • vue-router(this.$router)如何在新窗口打开路由跳转页面

    vue-router(this.$router)如何在新窗口打开路由跳转页面

    这篇文章主要介绍了vue-router(this.$router)如何在新窗口打开路由跳转页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解el Cascader懒加载数据回显示例

    详解el Cascader懒加载数据回显示例

    这篇文章主要为大家介绍了详解el Cascader懒加载数据回显示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Vue-cli Eslint在vscode里代码自动格式化的方法

    Vue-cli Eslint在vscode里代码自动格式化的方法

    本篇文章主要介绍了Vue-cli Eslint在vscode里代码自动格式化的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • vue函数input输入值请求时延迟1.5秒请求问题

    vue函数input输入值请求时延迟1.5秒请求问题

    这篇文章主要介绍了vue函数input输入值请求时延迟1.5秒请求问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 详解vue项目中使用token的身份验证的简单实践

    详解vue项目中使用token的身份验证的简单实践

    这篇文章主要介绍了vue项目中使用token的身份验证的简单实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论