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

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

proxy: {
	'/test': { //这里的test可以理解为后端接口里面的前缀,就是所有的地址前面都是http://aaa.com/test/xxx/xxx
		target: '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.mfbz.cn/a/344390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux的常见指令和基本操作演绎【复习篇章一】

文章目录 前言下载安装 XShellXShell 下的复制粘贴热键操作01.ls指令tree 02.cd指令03.touch指令04.mkdir指令(重要):05.rmdir指令 && rm 指令(重要)06.组合07.man指令(重要)&#xff1…

Packet Tracer - VLAN 间路由练习

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 172.17.25.2 255.255.255.252 不适用 R1 G0/1.10 172.17.10.1 255.255.255.0 不适用 R1 G0/1.20 172.17.20.1 255.255.255.0 不适用 R1 G0/1.30 172.17.30.1 255.255.255.0 不适用 R1 G0/1.…

前景贴纸类特效SDK,面向企业的技术解决方案

随着数字媒体技术的快速发展,视频内容在社交媒体、广告、教育等领域的应用越来越广泛。为了增加视频的吸引力和趣味性,许多企业开始寻求在视频中添加特效和贴纸。美摄科技的前景贴纸类特效SDK为企业提供了一种高效、灵活的解决方案,满足不同的…

R语言VRPM包绘制多种模型的彩色列线图

列线图,又称诺莫图(Nomogram),它是建立在回归分析的基础上,使用多个临床指标或者生物属性,然后采用带有分数高低的线段,从而达到设置的目的:基于多个变量的值预测一定的临床结局或者…

生命在于折腾——WeChat机器人的研究和探索

一、前言 2022年,我玩过原神,当时看到了云崽的QQ机器人,很是感兴趣,支持各种插件,查询游戏内角色相关信息,当时我也自己写了几个插件,也看到很多大佬编写的好玩的插件,后来因为QQ不…

微信聊天记录生成词云

目录 前置准备一、获取微信聊天记录(一)配置MuMu模拟器(二)微信数据备份与恢复(三)获取微信聊天记录文件至电脑(四)获取EnMicroMsg.db的密钥(五)使用SQLciphe…

详解线性分组码(linear code)

目录 一. 介绍 二. 线性分组码 三. 生成矩阵 四. 对偶编码 五. 校验矩阵 六. 陪集编码 七. 小结 一. 介绍 Low-density parity-check,简称LDPC码,翻译为低密度奇偶校验码。 我们所熟悉的LDPC码就是一个典型的线性分组码(linear bloc…

2023年度AI盘点 AIGC|AGI|ChatGPT|人工智能大模型

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 2023年是人工智能大语言模型大爆发的一年,一些概念和英文缩写也在这一年里集中出现,很容易混淆,甚至把人搞懵。 文章目录 前言01 《ChatGPT 驱动软件开…

气象条件对铸铁平台地基深度有哪些影响呢——河北北重

气象条件对铸铁平台地基有以下影响: . 1.地震 地震可能导致地基的震动和错动,因此地震活跃区域的建筑物通常需要更深的地基以提供更大的稳定性。 2..温度变化:气温的变化会导致地基中的土壤膨胀和收缩,从而影响地基的稳定性。特…

展厅设计更好的方法

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调,以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上,应当考虑内涵功用,从展厅作业人员的视点动身,为展厅作业人员提供杰出的环境&#xff…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测?1.2 需要评测什么?1.3 如何评测?1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

《WebKit 技术内幕》学习之五(4): HTML解释器和DOM 模型

4 影子(Shadow)DOM 影子 DOM 是一个新东西,主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

单域名证书,多域名证书,通配符证书怎么选?了解这些就够了

首次购买证书时,我们经常遇到不知道选择那种证书,由于缺乏相关的了解,稍不留神,就会踩坑!那初次购买证书时,了解这几点其实就足够了! 第一点,了解证书的类型。 证书一般分为DV&am…

<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…

acwing 动态规划dp 0 1背包问题

前言 hello小伙伴们,最近由于个人放假原因颓废了一段时间很长时间没有更新CSDN的内容了,唉,毕竟懂得都懂寒暑假静下心来学习的难度远比在学校里大的多。 但是,也不是毫无办法克服,今天我来了我们当地的一家自习室来学习…

大数据开发之Spark(RDD弹性分布式数据集)

第 1 章:rdd概述 1.1 什么是rdd rdd(resilient distributed dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象。 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1…

【操作工具】IDEA的properties文件变为灰色的解决办法

背景 赋值了一份properties文件放到项目下面,但是里面的key都是灰色的 解决方案 去掉下面3后面对应的勾 去掉之后

Java零基础学习18:字符串

编写博客目的:本系列博客均根据B站黑马程序员系列视频学习和编写目的在于记录自己的学习点滴,方便后续回忆和查找相关知识点,不足之处恳请各位有缘的朋友指正。 一、字符串拼接 第一题:false 第二题:true 二、 字符串…

Java项目:12 Springboot的垃圾回收管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类&#x…

LabVIEW高级CAN通信系统

LabVIEW高级CAN通信系统 在现代卫星通信和数据处理领域,精确的数据管理和控制系统是至关重要的。设计了一个基于LabVIEW的CAN通信系统,它结合了FPGA技术和LabVIEW软件,主要应用于模拟卫星平台的数据交换。这个系统的设计不仅充分体现了FPGA在…
最新文章