vue3跨域请求及一些常用配置

在使用vue3开发的时候,总免不了做一些基础的配置。比如跨域配置,一些常用函数的封装等等。接下来,我就做一些自己在在开发中所运用到一些常用配置。
一、跨域配置
其实,对于跨域配置,我之前的博文中也有说过,在这儿我也就大概再讲一次。毕竟vue3跟vue2还是有那么一点点的小差别。
1、在根目录下的 vite.config.js 文件中配置,网上有说这个文件不能配置,经测试,也没啥毛病。
在这里插入图片描述

proxy: {'/test': { //这里的test可以理解为后端接口里面的前缀,就是所有的地址前面都是http://aaa.com/test/xxx/xxxtarget: 'http://www.laravel2.bnc:83/index.php',//这个不多说,请求的目标地址changeOrigin: true,//是否允许跨域//rewrite: path => path.replace(/^\/api/, '')pathRewrite: {'^/test': '/' // 重写路径(表示请求的地址没有test前缀的时候)}}
}

2、在src目录下新建一个utils目录(其实文件夹的名字可以随意,但为了规范【网上也是多是这样子的名字】),之后在该目录下新建一个 request.ts 文件(js的文件也可以。如果是js ,那就按js的语法来写)

import axios from "axios";const service = axios.create({timeout:5000,baseURL:'http://127.0.0.1:5173/test',//最后面的test就是刚才上面配置文件中请求地址的前缀)//而 http://127.0.0.1:5173就是当前运行vue的地址//我只是为了方便,其实,是应该在根目录有一个env文件里面配置的headers:{//请求头,可以加上toekn等内容'Content-Type': 'application/json;charset=utf-8'},validateStatus(status){ //后端返回的状态码,是可选的参数,也可以不加return status == 200 ? true : false;}
})service.interceptors.request.use((config:any)=>{return config;
} , (error)=>{//console.log(error)Promise.reject(error)
})//响应的内容
//根据自己的业务情况,同时也看后端的同事返回的数据结构来配置
service.interceptors.response.use((response:any)=>{//响应成功const res = response.data;return Promise.resolve(res)
} , (error:any)=>{//响应失败let msg = {message:'no data',data:'none'}return Promise.reject(msg)
})export default service;

3、上面两步都完成后,我们就可以正常来请求我们的接口了。当然,为了以后更方便的维护自己的代码,业内也一般会有一个规范(当然 ,也不是一定得这样)。我们把相同的模块放一个文件里面来写。假如,用户模块。我们就这样,在src目录下下新建一个api目录,再在api目录下新建一个user.ts的文件
在这里插入图片描述

//请注意下面代码里面的请求方式,get,post ,put ....
//为了代码规范,我们尽可能的使用resful来写。当然,这也是需要后端的同事配合才行
//获取数据 get
//添加数据和文件上传  post
//修改 put
//删除 delete
//除get请求的参数是键是 params 以外,其他都是以data为键名
import service from '../utils/request' //注意引入的路径
export const getUser = (url:string , params)=>{return service({url:url,method:'get',params:params,})
}
export const insertUser = (url:string , data:object)=>{return service({url:url,method:'post',data:data})
}export const updateUser = (url:string , params:object)=>{return service({url:url,method:'put',data:params})
}export const deleteUser = (url:string , data?:object)=>{return service({url:url,method:'delete',data:data})
}//如果还其他模块,那就再新建一个文件,比如说 goods.ts 、member.ts 等等

4、在实际使用的时候,我们可以这样子去调用

import { getUser, insertUser, updateUser , deleteUser} from '../api/user'
function getUsers(id){let params = {id:id}getUser('user/getOne' , params).then(res=>{console.log(res)})
}function addUser(){let obj = {name:'xiaobing',age:15,sex:'boy',pwd:'123456'}insertUser('user/add' , obj).then(res=>{console.log(res)})
}function editUser(id){let obj = {name:'xiaobing',age:16,pwd:'456789'}//user/edit/${id} 而我们请求的是方式是pathinfo【user/edit/5】 ,并不是 参数【user/edit?id=5】这样的形式updateUser(`user/edit/${id}` , obj).then(res=>{console.log(res)})
}function delUser(id){let obj = {}//obj 是可选参数deleteUser(`user/del/${id}`).then(res=>{console.log(res)})
}

二、try … catch 的使用方法
根据菜鸟教程里面的讲解,try…catch是执行和捕获异常。其实,如果结使es6里面的promise来使用的话,有的时候也是一个很有意思的事儿。

async function test(age){return new Promise((resolve,reject)=>{if(age >= 18){resolve(true)}else{reject(false)}})
}async function env(){try{let bol = await test(5); console.log(bol)}catch(e){//其实,我们在执行test(age)函数的时候,因为参数age 是 小于18 ,所以,代码直接就进了异常,//而参数e 就是上面 test(age)代码里面走 reject() 的那一块。//当然,如果没有捕获取异常,那代码走的就是上面try的那一块console.error(e)}
}
env();

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Web 开发之 Flask 入门实践

导语:Flask 是一个轻量级的 Python Web 框架,广受开发者喜爱。本文将带领大家了解 Flask 的基本概念、搭建一个简单的 Web 项目以及如何进一步扩展功能。 一、Flask 简介 Flask 是一个基于 Werkzeug 和 Jinja2 的微型 Web 框架,它的特点是轻…

IDEA(十)2022版本 Services中服务窗口不显示端口号解决

目录 一、问题描述二、问题分析三、解决方案3.1 设置启动参数【生效】3.2 方法二:设置环境变量【不生效】3.3 方法三:删除缓存【不生效】 四、补充:如何手动控制端口显示 一、问题描述 我们在使用 IDEA 的过程中,会发现在 Servic…

使用 OpenCV 添加(混合)两个图像

目标 在本教程中,您将学习: 什么是线性混合以及为什么它有用;如何使用 addWeighted() 添加两个图像 理论 注意 下面的解释属于Richard Szeliski的《计算机视觉:算法和应用》一书 从我们之前的教程中,…

如何在不影响业务的前提下执行大批量数据变更操作?

相信很多 DBA 同学都碰到过这个问题:用一条 DML SQL 语句执行大批量数据更新或删除操作时(例如:定期删除过期的数据或清理无效的数据记录),如果不具备适当的索引,一旦单条 SQL 影响的行数过多,正…

从心理学角度看海外网红营销:品牌与消费者的心理互动

近年来,随着社交媒体的蓬勃发展,海外网红营销成为品牌推广的一种独特而有效的手段。这种新型营销方式不仅仅依赖于产品本身的特性,更加注重通过网红与消费者之间的心理互动来建立品牌形象,激发购买欲望。本文Nox聚星将和大家从心理…

SpringCloudConfig+SpringCloudBus+Actuator+Git实现Eureka关键配置属性热更新(全程不重启服务)

文章目录 前言1.痛点2.解决方案3.具体实现3.1搭建热配置服务3.2编写配置文件3.3搭建版本控制仓库3.4Eureka-Client引入以下依赖3.5Eureka-Client微服务编写以下配置bootstrap.yml提前加载3.6分别编写测试Controller3.7测试效果3.8下线场景压测 4.SpringCloudBus优化 前言 在上…

【数据库原理】(38)数据仓库

数据仓库(Data Warehouse, DW)是为了满足企业决策分析需求而设计的数据环境,它与传统数据库有明显的不同。 一.数据库仓库概述 定义: 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持企业管理和…

网络通信(Socket/TCP/UDP)

一、Socket 1.概念: Socket(又叫套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接协议,客户端的IP地址,客户端的端口,服务器的IP地址,服务器的端口。 一个Socket是一对IP地址…

第十回 朱贵水亭施号箭 林冲雪夜上梁山-FreeBSD/Linux 控制台基础操作

林冲被众庄客捉住,吊在门楼下,正被打时,柴进来了,赶快把林冲救下来。原来这是柴进打猎用的小庄子, 林冲就把火烧草料场一事跟柴进详细的说了。柴进说兄弟真是命运多磨难啊。林冲住了几日,恐怕连累柴进&…

Windows主机Navicat远程连接到Ubuntu18.04虚拟机MySQL

1. 在虚拟机上安装MySQL sudo apt-get install mysql-server sudo apt-get install libmysqlclient-dev 2. 检查安装 sudo netstat -tap | grep mysql 3. 查看默认密码 sudo cat /etc/mysql/debian.cnf 4. 用查看到的密码登录MySQL server,修改root用户的密码 …

Win11桌面路径改为其他盘的简单教程

Win11桌面路径改为其他盘的简单教程 ​ 在使用电脑的过程中,桌面文件夹是我们经常会使用到的地方,而默认情况下,桌面文件夹都会存放在系统安装盘的C盘上。随着时间的推移和文件的增多,C盘的磁盘空间可能会越来越紧张,…

短信平台搭建注意什么|网页版短信系统开发源码

短信平台搭建注意什么|网页版短信系统开发源码 短信平台是企业进行市场营销、客户关系管理和即时通讯的重要工具。为了确保短信平台的稳定运行和高效利用,以下是在搭建短信平台时需要注意的几个重要方面。 1. 需求分析:在搭建短信平台之前,需…