express/koa2中使用http-proxy-middleware代理转发后端接口解决跨域问题

由于后端接口没有设置允许跨域,故前端需要自己解决,如果前端项目是node起的服务,可以使用express/koa2框架,配合http-proxy-middleware中间件转发后端接口

express中:

1.先安装依赖

npm i http-proxy-middleware -D

2.设置代理,可配置多条

var app = express();// 设置反向代理解决跨域,类似nginx的反向代理,参考https://github.com/chimurai/http-proxy-middleware/tree/2.x?tab=readme-ov-file
var {createProxyMiddleware} = require('http-proxy-middleware');//http-proxy-middleware是使用http-proxy封装的,基于body-parser上封装的,必须放在 json() 之前
app.use(createProxyMiddleware('/rmt', { target: 'http://14.22.13.13:10000/rmt', changeOrigin: true,  }));
app.use(createProxyMiddleware('/vlpr',{target: 'http://127.0.0.1:8080/vlpr', changeOrigin: true}));//请求http://localhost:3000/vlpr相当于请求http://127.0.0.1:8080/vlpr
app.use(createProxyMiddleware('/admin',{target: 'http://116.162.165.193:8081/admin',// 目标服务器 hostchangeOrigin: false,// 默认false,是否需要改变原始主机头为目标URL// ws: true,// 是否代理websockets// pathRewrite: {//   '^/api/old-path': '/api/new-path',// 重写请求,比如我们源访问的是/api/old-path,那么请求会被解析为/api/new-path//   '^/api/remove/path': '/path'// },// router: {//   'dev.localhost:3000' : 'http://localhost:8000'// 如果请求主机 == 'dev.localhost:3000',重写目标服务器 'dev.localhost:3000' 为 'http://localhost:8000'// }// logger: console,//打印日志// pathFilter: '**',//匹配所有
}));//请求http://localhost:3000/admin相当于请求http://116.162.165.193:8081/adminapp.use(express.json());//注意如果有用到这个,需要放在http-proxy-middleware后面,不然会报错404,笔者已踩坑//...其他代码...

koa2中:

1.安装依赖:

npm i http-proxy-middleware koa2-connect -D

2.设置代理,可配置多条

// koa中使用http-proxy-middleware会报错参考https://blog.csdn.net/fxss5201/article/details/122659412
// 设置反向代理解决跨域,类似nginx的反向代理,参考https://www.cnblogs.com/zhaoweikai/p/9969282.html
// 设置反向代理解决跨域,类似nginx的反向代理,参考https://github.com/chimurai/http-proxy-middleware/tree/2.x?tab=readme-ov-file
const k2c = require("koa2-connect");
var {createProxyMiddleware} = require('http-proxy-middleware');//http-proxy-middleware是使用http-proxy封装的,基于body-parser上封装的,必须放在 json() 之前
app.use(async (ctx, next) => {if (ctx.url.startsWith("/rmt")) {ctx.respond = false;await k2c(createProxyMiddleware({target: "http://14.22.13.13:10000/rmt",changeOrigin: true}))(ctx, next);}if (ctx.url.startsWith("/vlpr")) {ctx.respond = false;await k2c(createProxyMiddleware({target: "http://127.0.0.1:8080/vlpr",changeOrigin: true}))(ctx, next);}await next();
});app.use(bodyparser({enableTypes:['json', 'form', 'text']
}))
app.use(json())

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

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

相关文章

Redis为什么速度快:数据结构、存储及IO网络原理总结

Redis,作为内存数据结构存储的佼佼者,其高性能表现一直备受赞誉。那么,Redis究竟是如何实现这一点的呢?接下来,我们将更深入地探讨其背后的关键技术,并提供进一步的优化策略。 一、内存存储与数据结构设计…

本地缓存之王Caffeine 保姆级教程(值得珍藏)

1. 简介 在编程领域,缓存是不可或缺的一部分,从处理器到应用层,其应用无处不在。从根本上讲,缓存是利用空间换取时间的一种策略,通过优化数据存储方式,提高后续数据访问速度。 对于Java开发者来说&#x…

黑豹程序员-vue3实现剪贴板复制

需求 vue中实现复制文字到剪贴板上 注意 创建ClipboardJS对象时&#xff0c;第一个参数绑定组件 class的名称。此时class为此名称的才能有复制功能。 方法代码 <script setup> // npm install clipboardimport ClipboardJS from clipboard//复制文字到剪贴板const c…

【开源】基于JAVA语言的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

【现代控制系统】从状态方程导出微分方程

从状态方程导出微分方程 2023年6月20日 1. 基本方法 状态空间表达式&#xff1a; x ˙ ( t ) A x ( t ) B u ( t ) y ( t ) C x ( t ) D u ( t ) \begin{aligned} &\dot{ x}(t){ A }{ x }(t){ B }{ u } (t) \\ &{ y }(t){ C } { x }(t){ D } { u }(t) \end{alig…

基于Javaweb开发的二手图书零售系统详细设计【附源码】

基于Javaweb开发的二手图书零售系统详细设计【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

使用 fdisk 和 mkfs 创建并挂载新硬盘

在Linux系统中&#xff0c;管理磁盘空间是一项关键的任务。有时&#xff0c;我们需要在系统中添加新的硬盘并将其用于特定的用途&#xff0c;比如存储日志文件。本文将介绍如何在Linux系统上使用fdisk和mkfs工具创建、格式化和挂载新硬盘。 1. 确认可用磁盘 首先&#xff0c;…

java的==运算符和equals详解

①chatgpt的解释 在Java中&#xff0c;和equals都是用于比较两个对象的操作符&#xff0c;但它们的行为和用途有所不同。 操作符&#xff1a; 对于基本数据类型&#xff0c;比较的是它们的值是否相等。例如&#xff0c;int a 5; int b 5; System.out.println(a b); // 输出t…

内网穿透natapp使用教程(Linux)

我的使用场景&#xff1a;在家访问学校服务器&#xff0c;由于不在一个局域网&#xff0c;所以需要使用内网穿透&#xff0c;我使用的是natapp。需要在有局域网的时候做好以下步骤。 &#xff08;natapp官网&#xff1a;https://natapp.cn/&#xff09; 1. 下载客户端 &#x…

springboot入门2

学习目标&#xff1a; 了解数据库配置加密方法&#xff0c;数据库连接池&#xff0c;mybatis-paginationInterceptor分页&#xff0c;pagehelper分页常用功能 学习内容&#xff1a; 1、mybatis plus配置加密 1.1、生成加密配置 package sccba.example;import com.baomidou…

模式设计:工厂模式

工厂设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。工厂模式属于创建型模式&#xff0c;它在创建对象时提供了一种封装机制&#xff0c;将实际创建对象的代码与使用代码分离。 …

盲盒App小程序开发:引领未来购物新潮流

随着科技的不断发展&#xff0c;我们的购物方式也在不断改变。近年来&#xff0c;盲盒购物逐渐成为了一种新型的消费模式&#xff0c;受到了广大消费者的热烈欢迎。为了满足消费者的需求&#xff0c;越来越多的企业开始涉足盲盒App的开发。本文将探讨盲盒App开发的意义、前景以…

使用Docker搭建开发环境:MySQL、Redis、MongoDB和Selenium Grid

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何支持Docker的平台上。在本篇博客中&#xff0c;我们将详细介绍如何用Docker安装MySQL、Redis、MongoDB和Selenium Grid&#xff0c;并给出相应…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

【GitHub项目推荐--国外名校AI教程】【转载】

这个开源项目搜集了 YouTube 上优质的机器学习教程&#xff0c;方向包括机器学习、深度学习、计算机视觉、自然语言处理、无监督学习等等。 开源地址&#xff1a;https://github.com/dair-ai/ML-YouTube-Courses

[260. 只出现一次的数字 III](C语言题解)(位运算)(力扣)

> Problem: [260. 只出现一次的数字 III](260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09;) # 思路 > 想到数组中只有一个数只出现了一次的解法&#xff1a;**所有数异或&#xff0c;最后答案就是那个只出现一次的数**&#xff0c;该题只需将两个不…

Kubernetes成本优化

云原生可以帮助团队更精细化利用资源&#xff0c;但如果缺乏工具的帮助&#xff0c;很难采取适当的措施优化资源的使用。本文介绍了若干用于可视化Kubernetes资源使用情况的工具&#xff0c;并且可以自定义策略优化资源使用&#xff0c;实现更好的成本优化。原文: Kubernetes C…

新概念英语第二册(42)上

【New words and expressions】生词和短语&#xff08;13&#xff09; musical adj. 精通音乐的 market n. 市场&#xff0c;集市 snake charmer 玩蛇者&#xff08;通常借音乐控制&#xff09; pipe …

《WebKit 技术内幕》学习之十五(5):Web前端的未来

5 Crosswalk项目 Crosswalk项目是由英特尔公司发起的一个开源项目&#xff0c;该项目基于WebKit&#xff08;Blink&#xff09;和Chromium等开源项目打造&#xff0c;其目的是提供一个跨不同操作系统的Web运行环境&#xff0c;包括Android、Tizen、Linux、Windows、MacOS等众多…

c语言-文件的读写操作(上)

文章目录 前言一、文件基础1.1 文件的分类1.2 文件路径和文件名 二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭 三、文件顺序读写3.1 fputc()和fgetc()3.2 fputs()和fgets()3.3 fprintf()和fscanf()3.4 fwrite()和fread()3.4 对比一组函数 总结 前言 本篇文章介绍c语…