通过nginx解决vue项目打包后跨域代理失效问题

news2024/12/23 9:44:36

这里 我的接口是写在 http://localhost:80上的
接口名是user 需要一个id路径参数 我们知道 80是默认 所以就可以不带端口因此访问就是http://localhost/user/1
在这里插入图片描述
然后 我vue项目中的 vue.config.js 配置如下

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  publicPath:'./',  // 执行 npm run build 统一配置路径
  transpileDependencies: true,
  lintOnSave: false,
  devServer: {
    proxy: {
      "/user": {
          target: 'http://localhost',
          ws: true,
          changeOrigin: true,
          pathRewrite: {
              ['^' + process.env.VUE_APP_BASE_API]: ''
          }
      },
    }
  }
})

这里 我们 proxy 中写了一个跨域代理 当匹配到/user指向http://localhost
然后 我们直接在需要请求的组件中编写 axios 请求语句

axios({
     url: `/user/1`,
    headers:{
    }
}).then(res=>{
    console.log(res);
})

这里 我们请求地址中带有/user
拼接上代理之后 就会成为 http://localhost/user/1
我们运行项目
请求状态是成功的
在这里插入图片描述
相应的数据也拿到了
在这里插入图片描述
那么 我们打包出来 然后打开打包出来的文件夹 打开下面的 index.html
在这里插入图片描述
可以看到 打包出来之后 他就不走我们的代理地址了
因为生产环境和开发环境毕竟是不太一样
我们可以通过process.env.NODE_ENV就行判断
process.env.NODE_ENV 为development 说明是开发环境 为production则为生产环境

我们可以将axios代码改成这样

axios({
     url: `${process.env.NODE_ENV == "development"?"/user/1":"http://localhost:8080/pro-api/user/1"}`,
    headers:{
    }
}).then(res=>{
    console.log(res);
})

简单说 当我们处在开发环境 我们直接 url为/user/1继续走vue.config.js中匹配user的代理
如果打包成生产环境 我们就直接将整个请求路径写上去 当然 如果直接写燕来的请求地址 应该是http://localhost/user/1
但懂nginx的朋友应该都知道 我们已经没有走代理了 那么 直接请求http://localhost/user/1是肯定要跨域的
所以 我就用nginx代理了一下
nginx配置代码如下


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 8080;
        server_name localhost;
        location / {
            root D:\exemin\dist;
        
        }
        location ^~/pro-api/ {
            proxy_pass http://localhost/;
            # rewrite ~/pro-api/(.x)s /sl break;
        }
    }
}

意思就是请求http://localhost:8080/pro-api/他会代理到http://localhost
所以 实际的请求地址就是 http://localhost/user/1
如果不太熟悉nginx的朋友 可以参考我的文章
nginx解决请求跨域问题
然后我们再次打包
然后访问 我们nginx代理的地址 http://localhost:8080/ 他就会指向D:\exemin\dist
我们可以看到 这次就请求成功了
在这里插入图片描述
数据也放回成功了
在这里插入图片描述
当然 我是为了方便才给大家这样写的 大家最好还是二次封装一下axios好看一点
主要的核心思想就是 process.env.NODE_ENV判断是什么环境 如果是生产环境就不要想系统能帮你代理了 自己老老实实去写nginx代理吧

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

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

相关文章

00后职场人,怎么做到刚来就涨薪5k? 原因竟是学会了这个宝藏工具

经常有粉丝问我有“有哪些适合绝大多数普通职场人的制作大屏的工具?” 确实,在这个内卷的时代,大家想要的是更加炫酷的汇报效果。要满足大多数职场人的大屏工具首先一定要满足以下三点: (1)简单易上手&am…

使用Python技术开发一个社区婴幼儿预防接种系统

婴幼儿预防接种作为社区预防保健的主要工作之一,是儿科临床和公共卫生保健的基础,目前国内外对婴幼儿预防接种工作非常重视。我们社区在工作中改变传统服务理念,根据不同年龄段婴幼儿的心理状态,采取不同心理护理应用,进行婴幼儿预防接种。 本论文主要论述了如何使用Python技术…

国际原油如何投资?国际原油期货投资策略有哪些?

国际原油产品的规模比较大,市场的交易环境是非常安全的,相信很多人都对国际原油产品的投资比较感兴趣,但是个人投资者需要注意:要买卖实体原油几乎是不可能的,投资者参与国际原油投资最方便快速的方式,就是…

【TCP】滑动窗口

滑动窗口 概念: 我们都知道 TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包收到了应答了, 再发送下一个。 这个模式就有点像我和你面对面聊天,你一句我一句。但这种方式的缺点是效率比较低的。 如果你说完一句话…

大数据面试题:请描述MapReduce中shuffle阶段的工作流程,如何优化shuffle阶段?

map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,这个流程就叫shuffle。 shuffle: 洗牌、发牌——(核心机制:数据分区,排序,合并)。 shuffle是Mapreduce的核心&…

【社区图书馆】记:读完《网络工程师的Python之路:网络运维自动化实战(第2版)》读后感【书评】

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 书籍整体感受书籍中分了11大章&#…

springboot+vue实习管理系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的实习管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

数据库链接池从100ms优化到3ms!

数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。 1万并发用户访问 想象你有一个网站,压力虽然还没到Facebook那个级别,但也有个1万上下的并发访问——也就是…

开发中造成空指针的常见用法,如何避免

1. 前言 《手册》的第 7 页和 25 页有两段关于空指针的描述: 【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。 【推荐】防止 NPE,是程序员的基本修养,注意 NPE 产生的场景: 返回类型为…

AIGC周报|让AI来画《海贼王》;苹果限制员工使用ChatGPT;李彦宏:不担心大模型会让工作消失

AIGC(AI Generated Content)即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT,以及 DallE 2、Stable Diffusion 等文生图模型,都属于 AIGC 的典型案例,它们通过借鉴现有的、人类创造的内容来快速完成内容创作。 …

实现BIM的Revit软件学习资料

实现BIM的Revit软件学习资料 一、BIM与Revit的关系二、Revit使用方法总结(一)快捷键(二)一些技巧 一、BIM与Revit的关系 链接: BIM与Revit是什么关系?看完秒懂系列! REVIT是实现BIM理念的工具之一。 二、Revit使用方…

pyton打包成exe程序简易教程

我们知道,Python程序需要有python环境才能够运行的,但当我们开发出一个程序之后,给到用户 那么用户是不会去添加这个python环境的。 所以为了用户也能够正常使用,我们就需要将这个程序打包成exe程序。 1.打包之前需要先下载一个模…

Java面试知识点(全)-dubbo面试知识点

Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 面试官问你如果这个都不清楚,那下面的就没必要问了。 官网:http://dubbo.apache.org 为什么要用Dubbo&#xff1f…

基于 Socket 接口实现自定义协议通信

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 根据自定义的协议规范,使用 Socket 编程接口编写基本的网络应用软件。 掌握 C 语言形式的 Socket 编程接口用法,能够正确发送和接收网络数据包 开发一个客户端,实现人机交互界面和与服务器的…

ChatGPT助力Midjourney解锁惊喜创意

[请wx关注“云智AI助手”关注我们 │ 谢谢支持 ] Cloud wisdom, AI assistant 通过结合这两个强大的基础AI模型的优势,我们能够获得令人惊叹的效果。现在,你将有机会亲眼见证Midjourney和ChatGPT共同合作的潜力。它们能够协同工作,相互补充&…

Shader Graph18-反射、折射函数

一、打开Unreal,新建Material叫做DemoReflectionRefraction 首先是看一下引擎内置的反射,Base Color设置为1是白色,Metallic设置为1金属强度为最大,Roughness为0粗糙度为最小,那么最后的结果球面上显示的就是周围环境。…

目标检测复盘 --3. Fast RCNN

RCNN的CNN部分使用AlexNet作为backbone来提取特征,Fast RCNN使用了VGG16来作为backboneRCNN将2000个框送入网络提取特征,Fast RCNN是将图像送入CNN来提取特征得到一个特征图将SS(Selective Search)算法获取的提议框映射到上面的特征图上,获取…

Java API 基础

Java API 基础 一、相关知识学习 Java程序员在开发Java程序时,只需要安装有JDK,就可以在程序中使用import关键字导入Java API 中指定的包并在自己的程序中使用这些包中定义的各种类和接口。 1、 Java API 包 Java API 包 说明 java.accessibility 接…

微信小程序-页面跳转navigator组件

官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html 在官方文档当中有提到一个叫做页面栈的这么一个东西,就是一个水杯,进入一个页面就是入到页面栈,退出就是从页面栈当中移除&…

WebTerminal功能实现与代码演示(基于Golang和Xterm.js)

文章目录 目的方案说说明实现过程与代码演示前端页面(Xterm.js)后端服务(Golang) 编译与测试总结 目的 WebTerminal是一个比较有意思的功能,让我们可以脱离专门的软件,在浏览器中就可以与Linux设备进行交互…