vue框架学习 -- 跨域问题解决之 proxy 配置

在Vue.js项目中,为了在开发环境下解决跨域问题,我们可以利用 vue.config.js
文件中的 devServer.proxy 配置来设置一个代理服务器。这个代理服务器会拦截特定的请求,并将其转发到目标后端服务器。
以下是一个基本的proxy配置详解:
// vue.config.js 文件

// vue.config.js 文件module.exports = {// ...devServer: {// 配置代理proxy: {// 指定需要代理的URL前缀'/api': {// 目标API服务器的基础URL(将被替换为实际发送请求的目标地址)target: 'http://localhost:3000', // 假设后端服务器运行在本地3000端口// 是否需要改变请求头中的主机信息(true表示模拟同源请求)changeOrigin: true,// 路径重写规则,当路径匹配'/api'时,// 将路径中的'/api'替换成''pathRewrite: {'^/api': '' // 如果接口不需要/api前缀,则可以去掉它},// 可选配置项:自定义headersheaders: {'X-Custom-Header': 'foobar'},// 可选配置项:重写函数,允许更灵活的路由匹配和替换onProxyRes(proxyRes, req, res) {// 对响应进行处理...},// 可选配置项:错误处理onError(err, req, res) {// 当代理出错时执行},// 可选配置项:WebSocket支持ws: true,// 其他可选高级配置,如:// secure: false, // 如果目标是HTTPS,但证书不受信任,设置为false// logLevel: 'debug', // 设置日志级别// autoRewrite: true, // 自动重写路径以适应代理目标// etc.},},},
};

通过上述配置,当Vue应用在开发过程中发出对 /api/xxx 的任何HTTP请求时,这些请求会被自动代理至 http://localhost:3000/xxx
从而绕过了浏览器的同源策略限制,使得前端应用能够与不同域名下的后端服务正常交互。
请注意,该配置仅在开发阶段使用,生产环境部署时通常不再需要这种代理,因为生产环境一般可以通过Nginx等反向代理服务器或配置CORS来解决跨域问题

示例代码:
// vue.config.js 文件

const { defineConfig } = require('@vue/cli-service');
const { resolve } = require('path');
const env = process.env;
const IS_PRODUCTION = env.NODE_ENV === 'production';// 代码压缩工具
const TerserPlugin = require('terser-webpack-plugin');// 设置版本号
env.VUE_APP_VERSION = require('./package.json').version;module.exports = defineConfig({publicPath: './',assetsDir: 'static',transpileDependencies: true,lintOnSave: false,productionSourceMap: false,devServer: {port: 8080,proxy: {[env.VUE_APP_API]: {target: env.VUE_APP_API_PROXY, // 代理的 API 服务器// secure: false,  // httpschangeOrigin: true,pathRewrite: {[`^${env.VUE_APP_API}`]: '',},},},client: {overlay: false,},// Webpack 4 devServer.before configurations,In Webpack 5 is devServer.setupMiddlewares configurationssetupMiddlewares: function (middlewares, devServer) {if (!devServer) {throw new Error('webpack-dev-server is not defined');}return middlewares;},},css: {// 开启 CSS source maps?sourceMap: !IS_PRODUCTION,loaderOptions: {less: {lessOptions: {modifyVars: {},javascriptEnabled: true,math: 'always',},},},},pluginOptions: {'style-resources-loader': {preProcessor: 'less',patterns: [resolve(__dirname, 'src/assets/styles/_variable.less'), resolve(__dirname, 'src/assets/styles/global.less')],},},configureWebpack: config => {// 给输出的js名称添加hashconfig.output.filename = "dist/js/[name].[hash].js";config.output.chunkFilename = "dist/js/[name].[hash].js";config.optimization = {minimizer: [// ============代码压缩 start============new TerserPlugin({cache: true,parallel: true,sourceMap: false, // Must be set to true if using source-maps in productionextractComments: false, // 删除注释terserOptions: {// https://github.com/webpack-contrib/terser-webpack-plugin#terseroptionsoutput: {comments: false, // 删除注释},compress: {warnings: false, // 若打包错误,则注释这行drop_debugger: true,drop_console: true,pure_funcs: ['console.log'],},},}),// ============代码压缩 end============],splitChunks: {cacheGroups: {// 将配置文件单独打包config: {name: "_config",test: /[\\/]src[\\/]config[\\/]/,chunks: "all",// priority: 3,reuseExistingChunk: true,enforce: true},}}}},
});

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

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

相关文章

区块链技术和应用

文章目录 前言 一、区块链是什么? 二、区块链核心数据结构 2.1 交易 2.2 区块 三、交易 3.1 交易的生命周期 3.2 节点类型 3.3 分布式系统 3.4 节点数据库 3.5 智能合约 3.6 多个记账节点-去中心化 3.7 双花问题 3.8 共识算法 3.8.1 POW工作量证明 总结 前言 学习长…

Drone+Gitee自动执行构建、测试和发布工作流

拉取Drone:(至于版本,你可以下载最新的) sudo docker pull drone/drone:2 拉取runner: sudo docker pull drone/drone-runner-docker 在Gitee中添加第三方应用: 进入个人主页,点击设置: 往下翻,找到数…

前缀和,差分算法理解

前缀和是什么: 前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身)。前缀和分为一维前缀和,以及二维前缀和。前缀和是一种重要的预处理,能够降低算法的时间复杂度 说个人话就是比如有一个数组: …

H3CNE-6-ICMP数据包分析

ICMP:Internet Control Message Protocol ICMP用来传递差错、控制、查询等信息 Wireshark抓包 Wireshark下载国内镜像 ICMP数据包格式 Type:表示ICMP消息类型 Code:表示同一消息类型中的不同信息 ICMP消息类型和编码类型 ICMP应用 &…

Java 反射基础

概述 Java反射(Reflection)是Java编程语言的一个特性,它允许在运行时对类、接口、字段和方法进行动态查询和操作。反射提供了一种在运行时查看和修改程序行为的能力,这通常用于实现一些高级功能,如框架、ORM&#xff…

亚马逊开店详细教程(6)- 获得商品的评分

1. 为什么要参加 VINE计划 用户在浏览一个新上架的商品时,通常会参照以往买家的对商品的评论,如果你是新全的商品可能没有任何评论信息,这可以会让一部分用户对购买产品有所顾虑,参加亚马逊Vine计划能够帮助新产品快速获得高质量…

vue实现esc关闭div弹窗的自定义指令

弹窗是 div 实现的(非el-dialog),效果:按下esc,关闭弹窗 directive/divEscClose/divEscClose.js export default {bind: function (el, binding, vnode) {let keydownHandler; ​const closeModal () > {if (typeof binding.…

【MySQL精通之路】SQL优化(1)-查询优化

SQL优化方案主博客: 【MySQL精通之路】SQL优化(1)-CSDN博客 SELECT查询优化: 以下优化都由MySQL查询优化器自动进行了处理。我们了解的过程中需要知道我们如何编写SQL以使优化器可以优化我们的查询语句。 之所以分成多博客发布,主要是为了…

2024年山东省安全员C证证考试题库及山东省安全员C证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

【Spring MVC】_SpringMVC项目返回数据

目录 1. 注解使用示例 1.1 使用Controller注解 1.2 使用RestController注解 1.3 使用Controller与ResponseBody注解 2. 关于ResponseBody注解 前文已经介绍过使用Controller注解向前端返回一个HTML页面,接下来将介绍向前端返回数据。 关于Controller和RestCon…

QT Qstring转QJson转QbyteArray

QT5.15 QT Qstring转QJson //读取json格式文件 // QByteArray json http_recv_str.toLatin1();//字符串转字节 QByteArray json http_recv_str.toUtf8().data(); //信息带中文,则需要toUtf8() //QByteArray json http_recv_str.toLocal8Bit().data();//…

Volatile的内存语义

1、volatile的特性 可见性:对一个volatile变量的读,总能够看到任意一个线程对这个volatile变量的写入。 原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile这种复合操作不具有原子性。 接下来我们用程序验证。…

独享IP是原生IP吗?

原生IP: 原生IP是指由Internet服务提供商(ISP)直接分配给用户的IP地址,这些IP地址通常反映了用户的实际地理位置和网络连接。原生IP是用户在其所在地区或国家使用的真实IP地址,与用户的物理位置直接相关。在跨境电商中…

设置height:100%不生效的原因

之前网课案例总是不屑于去看,因为总觉得太花时间,但是不可否认的是,认真去看还是会有收获的,而且常有意外收获 昨天在看实现动画效果的综合案例中,意外解决了我长久以来的一个疑问:为什么给元素设置height…

java在类的定义中创建自己的对象?

当在main方法中新建自身所在类的对象,并调用main方法时,会不断循环调用main方法,直到栈溢出 package com.keywordStudy;public class mainTest {static int value 33;public static void main(String[] args) throws Exception{String[] sn…

Python并发编程:多线程

前序博客中已经介绍了基于多进程的并发编程,本篇主要介绍基于多线程的并发编程。 1 全局解释锁 1.1 定义 全局解释锁(Global Interpreter Lock,简称GIL)是Python(特别是CPython)解释器中的一个机制,这个机制会限制同一时间只有一个线程执行P…

啥?题目是认真的么?啥大模型开源还是闭源,这就是个驳论!

开源大模型与闭源大模型,你更看好哪一方? 简介:评价一个AI模型“好不好”“有没有发展”,首先就躲不掉“开源”和“闭源”两条发展路径。对于这两条路径,你更看好哪一种呢? 其实我认为2者之间压根没啥好纠…

Java队列简介

在现代应用程序开发中,队列是一种常见且强大的数据结构,用于存储和管理待处理的任务序列。结合MySQL数据库,我们可以利用队列实现任务的持久化存储与高效处理。本文将通过四个案例,详细介绍如何在Java中使用队列,并结合…

面了字节大模型算法岗,太难了。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

PCM和QAM

PCM(脉冲编码调制)和QAM(正交振幅调制)是两种不同的信号调制技术,它们在通信系统中有着不同的应用和特点。 PCM(脉冲编码调制) 概述 PCM是一种数字信号处理技术,用于将模拟信号转…