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

news2024/9/21 14:34:41

目录

    • 一、前言
    • 二、封装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);
  });

五、运行结果

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rust api接口开发(以登陆和中间件鉴权为例)

rust rest api接口开发 所需依赖 axumtokioredis cargo add axum redis cargo add tokio --featuresfull路由服务创建和运行 //子路由 let v1router axum::Router::new(); //主路由,并将子路由绑定到主路由 let routeraxum::Router::new().nest("/v1",v1router)…

Zabbix6.4监控Windows上的GPU使用率

背景:一台Windows物理机上装了英伟达的GPU显卡,业务需要实时监控它的使用率。 1、确认nvidia-smi命令可用 2、命令查询相关使用情况 3、服务器上部署zabbix-agent 提前下载好包上传,路径自行修改 C:\Users\Administrator>C:\zabbix_age…

集团数字化转型方案(三)

集团数字化转型方案通过系统整合人工智能(AI)、大数据、云计算和物联网(IoT)技术,建立了一个全面智能化的业务管理平台,涵盖从业务流程自动化、数据驱动决策支持,到客户体验优化和供应链管理的各…

Redis基础到高级狂神笔记一篇总结完

学习视频:【狂神说Java】Redis最新超详细版教程通俗易懂_哔哩哔哩_bilibili 目录 1.为什么用NoSQL 1.1单机MySQL的美好年代 1.2 Memcached(缓存) MySQL 垂直拆分(读写分离) 1.3分表分库 水平拆分 Mysql 集群 1.4现今 1.5为什么用NoSQL&…

『深度长文』4种有效提高LLM输出质量的方法!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 LLM,全…

C#发送邮件功能实现全面指南?有哪些方法?

C#发送邮件性能优化技巧?C#发信时如何设置邮件格式? 在现代应用程序开发中,发送电子邮件是一个常见的需求。无论是发送通知、警报,还是定期报告,邮件功能都是至关重要的。AokSend将详细探讨如何在C#中实现发送邮件的功…

为什么要使用TikTok云手机

随着TikTok平台的日益繁荣,TikTok云手机作为一种新兴的运营工具,正以其独特的云端技术和用户体验,赢得广大用户的青睐。相较于传统手机,TikTok云手机通过云端技术为用户带来了一系列新的优势,让TikTok运营变得更加灵活…

读软件开发安全之道:概念、设计与实施04缓解

1. 缓解 1.1. 安全思维转换为有效行动的方法就是首先预判威胁,然后针对可能的漏洞加以保护 1.2. 主动响应的做法就叫做“缓解” 1.2.1. mitigation 1.2.2. 喂宝宝的时候给孩子围上围嘴,避免掉下来的食物粘在宝宝的衣服上,还有安全带、限速…

虚幻引擎游戏开发 | 程序化生成道具位置 Randomize Height

当地图上有无数个收集物【如水晶】,一键随机化高度 应用前 应用后 这时候水晶的高度是离散型地在0和110两个数中平均概率地选择。 如果要有权重地分布高度,减少高位水晶的比例(由于过多连续跳跃会让玩家无聊和难以持续专注)可以加…

leetcode_62. 不同路径 + 63. 不同路径 II

62. 不同路径 题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条…

第1章-01-为什么主要选择用Python来做爬虫

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师&am…

Nacos配置中心组件学习

Nacos配置中心组件学习 1. Nacos简介1.1 Nacos是啥1.2 作用 2. springCloud项目集成2.1 maven依赖2.2 Nacos配置相关参数2.3 配置信息2.5 配置使用2.6 获取实时配置 3. nacos自动装配3.1 配置加载原理3.2 配置实时刷新原理 4. nacos配置中心原理3.1. 动态配置管理3.2. 配置存储…

这家AGV机器人龙头高歌猛进,半年营收27亿,国内对手们慌了吗?

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 机器人业务高歌猛进,海康威视创新引擎全速运转 海康威视于近日揭晓了其2024年上半年的辉煌成绩单。这份报告不仅彰显了公司整体业务的稳健增长,更引人注目的是…

Mybatis 一文速通 节约学习或复习成本

目录 1、简介 1.1、什么是Mybatis 1.2、持久化 1.3持久层 1.4为什么需要Mybatis? 2、第一个Mybatis程序 2.1、搭建环境 2.2、创建一个模块 2.3、编写代码 2.4、测试 3、CRUD 1、namespace 2、select 3、insert 4、update 5、delete 6、常见错误分析…

Linux进程间通信学习记录(IPC 机制、共享内存以及信号灯集)

0.System V IPC机制: ①.IPC对象包含:共享内存、消息队列和信号灯集。 ②.每个IPC对象有唯一的ID。 ③.IPC对象创建后一直存在,直到被显示地删除。 ④.每一个IPC对象有一个关联的KEY。(其他进程通过KEY访问对应的IPC对象&#xff…

SpringCloud远程调用为啥要采用HTTP,而不是RPC?

关于SpringCloud远程调用采用HTTP而非RPC。 1. 首先SpringCloud开启Web服务依赖于内部封装的Tomcat容器,而今信息飞速发展,适应大流量的微服务,采用Tomcat处理HTTP请求,开发者编写Json作为资源传输,服务器做出相应的响…

Flutter【01】状态管理

声明式编程 Flutter 应用是 声明式 的,这也就意味着 Flutter 构建的用户界面就是应用的当前状态。 当你的 Flutter 应用的状态发生改变时(例如,用户在设置界面中点击了一个开关选项)你改变了状态,这将会触发用户界面…

flume--数据从kafka到hdfs发生错误

解决: #1.将flume自带的依赖删除 mv /opt/installs/flume1.9/lib/guava-11.0.2.jar /opt/installs/flume1.9/lib/guava-11.0.2.jar.bak #2.将hadoop的依赖发送到flume下 cp /opt/installs/hadoop3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /opt/installs/f…

招商期货:以超融合支撑期货重要业务,承载80%信创系统

招商期货有限公司(以下简称“招商期货”)成立于 1993 年,是招商证券股份有限公司的全资子公司,注册资本 35.98 亿元,是中国首批券商全资控股期货公司。 随着数字化进程快速推进、交易模式不断创新,系统建设…

Axure设计之三级菜单导航教程(中继器)

中继器作为复杂的元件,通常被用来制作“高保真”的动态原型,以达到良好的视觉效果和交互效果。本文将教大家通过AxureRP9工具如何使用中继器设计三级菜单导航。 一、案例效果 原型预览:https://1zvcwx.axshare.com 主要效果: 1…