vite跨域proxy设置与开发、生产环境的接口配置,接口在生产环境下,还能使用proxy代理地址吗

news2024/12/23 1:16:46

文章目录

    • vite的proxy开发环境设置
    • 如果后端没有提供可以替换的'/mis'等可替换的后缀的处理办法
    • 接口如何区分.env.development开发和.env.production生产环境
    • 接口在生产环境下,还能使用proxy代理地址吗?

vite的proxy开发环境设置

环境:

  • vite 4.4.9(2023-9-27为止的最新版)
  • vue3 3.3.4(2023-9-27为止的最新版)
  • vant 4.6.8(2023-9-27为止的最新版)-这个只是UI框架,不影响配置
  • nodejs 16.16.0

开发环境配置需要在vite.config.js中进行。

完整代码如下:

import { defineConfig } from "vite";
import path from "path";
import vue from "@vitejs/plugin-vue";
import Components from "unplugin-vue-components/vite";
import { VantResolver } from "@vant/auto-import-resolver";

function resolve(dir) {
  return path.join(__dirname, dir);
}

export default defineConfig({
  //解决在路径中用@代替src目录
  resolve: {
    alias: { "@": resolve("src") },
  },
  plugins: [
    vue(),
    Components({
      resolvers: [VantResolver()],
    }),
  ],
  //这个是新增的本地服务器与proxy代理设置
  server: {
    open: false,
    port: 5171,
    https: false,
    hotOnly: false,
    proxy: {
      "/mis": {
        target: "http://106.37.73.60:8080",
        changeOrigin: true, //是否跨域
        // rewrite: (path) => path.replace(/^\/mis/, ""), //因为后端接口有mis前缀,所以不需要替换
        // ws: true,                       //是否代理 websockets
        // secure: true, //是否https接口
      },
    },
  },
});

重点关注'/mis'这里

如果是要访问后端的这个接口:http://www.imqd.cn/mis/auth/login,且你在request.js中写接口时,不想写mis/auth/login,而是想写/auth/login时,就需要像上面配置。它的意思是将本地的地址通过代理转发替换为后端地址,让它以为是同域请求。

更简单的理解是,它会找到后端接口的url中的'/mis',将其换为本地地址。

意思就是:http://www.imqd.cn/mis/auth/login会换成http://localhost/auth/login,但是这样会报404错误,因为替换后,接口少了mis,就需要加上才行,就比如本地http://192.168.8.87:5171/mis/auth/login的这个接口其实要等价访问后端的http://www.imqd.cn/mis/auth/login这个接口才行。添加的办法如下:

.env.development文件中写一个变量,统一添加该前缀:

# base api
VITE_BASE_API = '/mis'

这时不用写rewrite了。表示请求的本地地址和跨域地址一样,只是域名不一样,如下所示:

http://localhost:5171/mis/auth/login //本地
http://www.imqd.cn/mis/auth/login  //要代理的后端真实接口地址

如果后端没有提供可以替换的’/mis’等可替换的后缀的处理办法

如果后端提供的接口没有/mis等后缀,接口地址直接为:http://www.imqd.cn/auth/login那怎么设置请求代理地址呢?

这时也简单,可以用任意后缀来代替,最常见的就是用/api代替了,比如本地请求用http://localhost/api/auth/login来代理http://www.imqd.cn/auth/login,这样就需要修改vite.config.js如下:

proxy: {
      "/api": {
        target: "http://106.37.73.60:8080",
        changeOrigin: true, //是否跨域
        rewrite: (path) => path.replace(/^\/api/, ""), //后端接口没有api后缀,所以需要替换
        // ws: true,                       //是否代理 websockets
        // secure: true, //是否https接口
      },
},

然后在.env.development文件中改为VITE_BASE_API = '/api'即可

接口如何区分.env.development开发和.env.production生产环境

其实对应的就是如何使用.env.development.env.production环境。

可以在package.json中看到vitescript

"scripts": {
    "dev": "vite --mode development",
    "start": "vite --host 192.168.8.81",
    "build": "vite build"
  },

默认情况下,'npm run dev'即为开发环境,npm run build即为生产环境,不管在哪种环境下,你可以通过在代码中使用import.meta.env.VITE_BASE_API来调用两种开发环境的env文件下的VITE_BASE_API变量的值,如果是开发环境,就会读取.env.development中的值,生产环境,就会读取.env.production中的值。

接口在生产环境下,还能使用proxy代理地址吗?

请注意,这也是很多人会忽略的。只有在开发环境才会走vue.config.js里面的代码,proxy的代理才会生效。在生产环境下,因为前端代码已经被工程化构建化了(即dist目录下的文件),只有纯前端代码,他通常会部署到和后端服务一样的域名下,用的是相对地址,就不存在跨域了。.env.production中设置的变量也在构建过程中体现并分布到了各个接口中,如下图所示:

image-20230927141848232

如果你在web前端开发、面试、前端学习路线有困难可以加我V:imqdcnn。免费答疑,行业深潜多年的技术牛人帮你解决bug。

祝你能成为一名优秀的WEB前端开发工程师!

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

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

相关文章

服务断路器_服务雪崩解决方案之服务隔离

那显而易见,做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响! 因此,做服务隔离是很有必要的。 什么…

消费者偏移量_consumer_offsets相关解析

1.概述 __consumer_offsets 是 kafka 自行创建的,和普通的 topic 相同。它存在的目的之一就是保存 consumer 提交的位移。 __consumer_offsets 的每条消息格式大致如图所示: 可以想象成一个 KV 格式的消息,key 就是一个三元组:group.idtopi…

成都睿趣科技:抖音开通橱窗带货需要钱吗

随着社交媒体和电子商务的蓬勃发展,抖音作为一种流行的短视频平台,也推出了自己的“抖音橱窗”功能,让内容创作者能够通过视频展示和销售产品,从而实现商业化。那么,抖音橱窗带货是否需要费用呢? 首先,要开…

现代数据架构-湖仓一体

当前的数据架构已经从数据库、数据仓库,发展到了数据湖、湖仓一体架构,本篇文章从头梳理了一下数据行业发展的脉络。 上世纪,最早出现了关系型数据库,也就是DBMS,有商业的Oracle、 IBM的DB2、Sybase、Informix、 微软…

关于坐标的旋转变换和坐标系的旋转变换

不管是坐标的旋转变换还是坐标系下的旋转变换,只和旋转的顺时针和逆时针有关。然坐标系间的顺时针和逆时针是根据当前坐标系在目标坐标系下的相对位置确定。 一。逆时针旋转belta角度的公式 二。顺时针旋转belta角度的公式 三。坐标的旋转变换 1.坐标的旋转变换相…

一文了解企业如何实现文件自动化实时同步

在当今的数字化时代,数据是企业的核心资产,也是企业竞争力的重要体现。数据的传输、共享、协作、备份等都需要依赖文件同步技术,实现数据在不同平台和设备之间的一致性和可用性。文件同步是指将一个或多个文件夹中的内容复制或更新到另一个或…

网络安全攻防:软件逆向之反汇编

网络安全是当今社会中一个非常重要的问题,而软件逆向工程是网络安全攻防中常用的一种技术手段。在软件逆向工程中,反汇编是一种基础而重要的技术。通过反汇编,我们可以将二进制程序转换为汇编语言,从而更好地理解程序的执行流程和…

在伦敦银投资中,技术是万能的?

一般进行伦敦银投资的投资者都会学习很多技术分析的方法,技术分析是一种还很适合普通投资者使用的市场分析工具,但是在伦敦银投资中,技术分析的作用不是万能的,其实技术分析还是有很多各种各样的缺点,如果投资者迷信技…

前缀和实例5(连续数组)

题目: 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0…

Exception in thread “main“ java.sql.SQLException: No suitable driver

详细报错信息如下: Exception in thread "main" java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.$anonfun$driverC…

js遍历对象属性的方法

在 JavaScript 中,有许多方法可以遍历对象的属性,但在性能上并没有显著的差异。对于大多数用例,使用 for-in 循环或 Object.keys() 方法是最常见的。 然而,如果你正在寻找微优化,并希望遍历大量对象,可以考…

数字孪生需要自建3D模型?搞懂Blender建模要点,看这篇文章就够了!

1. Blender的基础介绍 关于城市大师的建模软件,一般推荐使用Blender。一是因为Blender是开源免费的,不会有经济负担,二是因为我们软件有针对Blender的插件,对其进行了一定程度上的补充。 【温馨提示】如果使用的是3Dmax或者maya…

Zabbix“专家坐诊”第205期问答汇总

问题一 Q:Zabbix6.0安装出错,未找到zabbix-server的配置文件。 A:Find / -name zabbix-server.conf,试一下 Q:找到了。 Q:配置好了,虚拟化平台监控还是不行。 A:因为虚拟化监控用的…

PL/SQL+cpolar公网访问内网Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle,是甲骨文公司的一款关系…

python生成Markdown文件

我们使用的库是markdown_strings pip install markdown_strings程序如下: from markdown_strings import header, table, code_blockwith open("mark_down.md", w, encoding"utf8") as file:file.write(header("一级目录", 1) &qu…

python抓取网页视频

1. 喜马拉雅音频 1-1 喜马拉雅 import requests import json import time import random import hashliburl https://www.ximalaya.com/revision/play/v1/audio?id46103875&ptype1headers { user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.3…

法线贴图的原理和作用

在上一篇文章中详细介绍了位移贴图的相关知识,在本章中我们继续讲述法线贴图的相关概念,文章后面继续用GLTF 编辑器 来演示下法线贴图的模型渲染效果。 1、什么是法线贴图 法线贴图(Normal Map)是一种纹理映射技术,用…

DAY04_瑞吉外卖——文件上传下载菜品新增菜品分页查询菜品修改

目录 1. 文件上传下载1.1 上传介绍1.1.1 概述1.1.2 前端介绍1.1.3 服务端介绍 1.2 下载介绍1.3 上传代码实现1.3.1 前端代码1.3.2 服务端实现1.3.3 测试 1.4 下载代码实现1.4.1 前端代码1.4.2 服务端代码1.4.3 测试 2. 菜品新增2.1 需求分析2.2 数据模型2.3 准备工作2.4 前端页…

golang工程——底层原理【defer、panic、recover、interface】

defer 延时性 不管defer函数后的执行路径如何,最终都将被执行。在Go语言中,defer一般被用于资源的释放及异常panic的处理。保证函数在任意路径执行结束后都能够关闭资源。defer是一种优雅的关闭资源的方式,能减少大量冗余的代码并避免由于忘…

Python 标准库之pathlib,路径操作

背景 pathlib 标准库是在 Python3.4 引入,到现在最近版 3.11 已更新了好几个版本,主要是用于路径操作,相比之前的路径操作方法 os.path 有一些优势,有兴趣的同学可以学习下 **官方文档:**https://docs.python.org/zh-…