【个人笔记公司项目】vue项目配置代理解决跨域问题

news2024/9/22 23:25:48

前后端分离模式势必会遇到跨域问题,比如我是10.106.46.169:8080要去请求10.114.46.108:9191。下面讲下代理详细步骤。

本文步骤基于本人的项目结构

一般项目结构已支持代理

// 部署时需要将改开关置为false
window.isDev = true

if (window.isDev) {  // Dev
    window.log = true
} else {  // Prod & Mock
    // 日志打印相关 可在Console中设定 window.log = true 开启打印
    window.log = false // 普通日志打印开关
}

window.server = window.isDev ? '//10.114.46.108:9292' : ''

若不支持可按照下面步骤配置:

1、文件夹api/index.js中增加baseUrl。

// api/index.js文件
// 复杂书写
import Axios from 'axios'
import { commonConfig } from '../../../config'

Axios.defaults.baseURL = commonConfig.baseUrl  // 修改为自己本地ip
Axios.defaults.timeout = commonConfig.timeout

// 简单书写
import Axios from 'axios'
import { baseUrl } from '@/config'

Axios.defaults.baseURL = baseUrl
Axios.defaults.timeout = 10000
Axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8'
Axios.defaults.headers['X-lr-source'] = 'wms'

此项目属于大型复杂醒目上面提到的commonConfig定义在config.js文件,大型复杂项目中用于管理全局通用配置项,书写界面需要全局配置时直接引入config.js即可。

// 是否为开发模式(发布版需改为false)
export const isDev = DV.isDev
export const isHttps = window.location.protocol === 'https:'  // 是否为HTTPS
export const BASE_ROUTE = context.baseRoute

let server, host
if (isDev) {  // Dev
    window.log = true // 普通日志打印开关
} else {  // Prod & Mock
    window.log = false
}

const unifyBase = DV.unifyServer ? DV.unifyServer : ''
export const unifyUrl = unifyBase + DV.unifyBase   // 统一架构请求路径

export const commonConfig = {
    isDev,
    unifyUrl,
    base: DV.base,
    timeout: DV.timeout,
    baseUrl: DV.server + DV.base,
    uploadUrl: `${DV.server}/api/permit/upload`,
    locale: DV.locale ? DV.locale : 'zh-CN',
    tokenPrefix: DV.tokenPrefix,
    staticBaseUrl: isDev ? '/' : DV.base,
    wsHost: `${isHttps ? 'wss' : 'ws'}:${isDev ? DV.server + DV.base : '//' + location.host + DV.base}`,
    isEnableRelease: DV.isEnableRelease,
    isEnableAttach: DV.isEnableAttach,
    isEnableCommit: DV.isEnableCommit,
    isEnableCache: DV.isEnableCache,
    localeVersion: DV.localeVersion,
    hasPortal: window.hasPortal !== undefined ?  window.hasPortal : true
}

2、config.js中定义实际要请求的后端地址。

// config.js
// 以简单书写为例
import context from '../package.json'

export const isDev = true

export const BASE = context.base
export const BASE_ROUTE = context.baseRoute

// 改为实际请求后端地址
export const baseUrl = `${isDev ? '//127.0.0.1:9191': ''}/wms/` 

3、vite.config.js增加proxy。本项目package.json中启动项"dev": "vite",,所以要配置vite代理才会生效。

//vite配置代理
export default defineConfig({
   // 其他配置
  ...... 
  // 代理配置
  server: {
  	https: true,
    proxy: {
      '/api': { // 配置需要代理的路径 --> 这里的意思是代理http://localhost:80/api/后的所有路由
        target: 'https://172.20.9.153:8085', // 目标地址 --> 服务器地址
        changeOrigin: true, // 允许跨域
        ws: true,  // 允许websocket代理
		// 重写路径 --> 作用与vue配置pathRewrite作用相同
        rewrite: (path) => path.replace(/^\/api/, "")
      }
     },
  },
});

注意:配置代理的时候’/api’如果直接写成‘ /’,这样表示http://localhost:80/后面的路由都进行代理,这样会导致你加载本地资源会出错,因为你把加载本地资源的路径全部都代理到服务端去了,浏览器会向服务器进行资源请求,这样就会导致页面报错

至此,代理配置已完成。还有vue配置代理,本项目中未用到,这里也贴出代理配置方式

// vue配置代理
module.exports = {
  // 其他配置
  ...... 
  // 代理配置
  devServer: {
    https: true, // 默认是false, 默认就是http协议,true将http协议转换为https协议
    // 代理配置
    proxy: {
      '/api': { // 配置需要代理的路径 --> 这里的意思是代理http://localhost:80/api/后的所有路由
        target: 'https://172.20.9.153:8085', // 目标地址 --> 服务器地址
        changeOrigin: true, // 允许跨域
        ws: true,  // 允许websocket代理
        // 如果这里没有进行路径重写,当你访问http://localhost:80/api/login/,实际上访问的就是https://172.20.9.153:8085/api/login/
        pathRewrite: { // 重写代理路径
          // 就是把路径中的api都替换为空的字符串
          '^/api': '', // 因为服务端地址里面是没有api字段的,api只是为了区别需要代理的路径,如果服务端有api字段则不需要重新	
        }
      }
    }
  }
}

在这里插入图片描述

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

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

相关文章

计算机网络速成(二)

计算机网络面试(二)-CSDN博客 OSI七层体系架构 OSI七层模型是什么?每层的功能是什么? OSI七层模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,它从上到下分别是&am…

揭秘“商业园区综合管理平台”的无代码开发流程!

本文中的素材来自我在某国资投资集团朋友小赵的“有偿”投稿,要知道现在的商业园区也正在经历数字化改造,面对多商场、多店铺的复杂管理需求,各类商管集团纷纷进行线上互联网管理模式的转型。 这份素材有何不同之处呢?因为他们走了…

EthernetIP IO从站设备数据 转IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 网关采集ETHERNETIP IO数据 2 5 用IEC61850协议转发数据 4 6 网关使用多个逻辑设备和逻辑节点的方法 6 7 从设备的的EDS文件获取参数信息 8 8 案例总结 10 1 案例说明 设置网关采集EthernetIP IO设备数据把采集的数据…

成功解决:el-popconfirm组件来确认删除、修改等操作无效

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

深入理解java web分层架构的高内聚低耦合

​ 在软件开发中,构建一个高效、可维护且可扩展的应用系统一直是开发者追求的目标。分层架构和依赖注入(IOC)是实现这一目标的重要策略。本文将深入探讨三层架构的高内聚特性、低耦合的设计原则,以及如何通过IOC(控制反…

前端宝典之五:React源码解析之深度剖析Diff算法

本文主要针对React源码进行解析,内容有: 1、Diff算法原理、两次遍历 2、Diff瓶颈及限制 3、Diff更新之单节点和多节点原理 一、Diff源码解析 以下是关于 React Diff 算法的详细解析及实例: 1、React Diff 算法的基本概念和重要性 1.1 概念…

非专业人员该学什么程序语言

编程,一度被认为和驾驶一样是一项现代社会的基本技能,非专业人员也该有所掌握,中小学也在教。但实际上,它的普及程度远比驾驶差,掌握这个技能的人很少,在学校学过的知识,因为工作中用不上也都忘…

一文弄懂评分卡是什么

在最开始的信用审批过程中,客户的信用等级主要由专家进行主观评判。随着数据分析工具的发展和数据收集、存储越来越容易,各大机构逐渐使用统计模型将专家的评判标准量化为评分卡模型。从而更有利于客观评价客户风险,和批量高效对客户进行风险分级。随着技术的发展,机器学习…

力扣经典题目~快乐数~零基础也能看懂哦

202. 快乐数https://leetcode.cn/problems/happy-number/ 题目描述: 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&…

MyBatisX逆向工程

目录 逆向工程 准备好数据库、表 安装MyBatisX插件 项目连接数据库 引入依赖pom.xml 生成实体类、映射文件、接口 逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创…

晶体管电路设计学习(一)放大电路的工作

我们这里学习晶体管电路设计,会从晶体管到场效应管直到复杂的运放器件,主要是进行体系化的深入学习,只是一个学习和记录的过程。 放大电路的作用是将小信号放大为大信号。例如,将0.1V的信号提高为1V 信号----即是放大。 1.首先,用晶体管组成一…

TinyC编译器4—编译器基本流程

1.什么是编译器,为什么要开发编译器 编译器:将一种程序语言翻译为另一种程序语言的计算机程序。一般来说,源程序为高级语言,而目标语言则是汇编语言或者机器码。 一开始的程序员是用机器码写程序,非常容易出错&#…

UE5中制作箭头滑动转场

通过程序化的方式,可以制作一些特殊的转场效果,如箭头划过的转场: 1.制作思路 我们知道向量点积可以拿来做投影,因此可以把UV空间想象成向量坐标,绘制结果就是在某个向量上的投影: 绘制结果似乎是倾斜方…

【ISAC】Federated Edge Learning With Misaligned Over-The-Air Computation

[1]-Tse, David, and Pramod Viswanath. Fundamentals of wireless communication. Cambridge university press, 2005. 文章目录 1-综述2-系统模型 1-综述 misaligned OAC:预编码矩阵(含噪声) 没同步好 2-系统模型 θ ∈ R d \theta \in\m…

云计算实训31——playbook(剧本)基本应用、playbook常见语法、playbook和ansible操作的编排

playbook(剧本): 是ansible⽤于配置,部署,和管理被控节点的剧本。⽤ 于ansible操作的编排。 使⽤的格式为yaml格式 一、YMAL格式 以.yaml或.yml结尾 ⽂件的第⼀⾏以 "---"开始,表明YMAL⽂件的开始(可选的) 以#号开头为注释 列表中的所有成员都开始于…

耐氟化氢PFA蒸馏冷凝装置PFA烧瓶应用于氟化工半导体行业领域

氟化氢,化学式为 HF,是一种无色、有刺激性气味的气体,它在空气中会形成白色的雾。氟化氢具有很强的腐蚀性,能够侵蚀许多金属和非金属材料。这种腐蚀性使得氟化氢在工业上被用于蚀刻玻璃、清洗半导体器件以及加工金属等领域。 氟化…

Ubuntu | 更换 Solc 版本

目录 第一步:安装 pip3第二步:安装 solc-select第三步:查看可安装版本第四步:安装指定版本第五步:使用指定版本 前言:部署智能合约时报错,发现是 Solc 版本太高。 参考博客:Solc 安…

Spring Boot整合Quartz框架

说明:Quartz是一个定时器框架,可以实现定时任务,本文介绍如何在Spring Boot项目中整合Quartz框架,Quartz介绍参看下面这篇文章: 【Quartz】Quartz定时任务框架 创建Demo 首先,创建一个Spring Boot项目&a…

Qt Creator安装配置指南

1.官网下载在线安装包 官网地址: https://www.qt.io/download-dev#eval-form-modal 2.双击在线安装包按引导流程安装qt 3.选择自己要配置的qt环境版本 3.1如果要选中低版本的qt环境我这里安装的是qt5.15.2的(其他低版本也一样的),要勾选上Archive(存…

拓展销售网络:立即领取企元数智小程序合规分销系统!

"拓展销售网络:立即领取企元数智小程序合规分销系统!"企业的销售网络是企业成长和发展的关键,而企元数智小程序合规分销系统能帮助您快速拓展销售网络,实现销售业绩的持续增长。 通过领取企元数智小程序合规分销系统&am…