http实现反向代理

http实现反向代理
  • 需要安装http-proxy-middleware插件
npm i http-proxy-middleware
  • 准备proxy.html, 等会加载proxy.html可直接发起fetch请求
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body>有内容<script>// fetch 发起接口请求fetch("/api").then((res) => res.text());</script></body>
</html>
  • 准备xxx.config.js配置文件,配置proxy代理
module.exports = {serve: {proxy: {"/api": {target: "http://localhost:3000",  // 代理端口号到3000changeOrigin: true,rewrite:'相应的正则替换', // 可写可不写},},},
};
  • 准备proxyTest.js 代理node服务,服务端口号为3000
const http = require("node:http");
const url = require("node:url");http.createServer((req, res) => {// 接口路径带api的,则拦截提示返回成功 const { pathname } = url.parse(req.url);if (pathname === "/api") {res.end("代理 3000 成功");}}).listen(3000, () => {console.log("启动3000服务");});
  • 准备proxy.js 文件
const fs = require("node:fs");
const http = require("node:http");
const url = require("node:url");
// 反向代理中间代码
const { createProxyMiddleware } = require("http-proxy-middleware");// 获取html的内容,启动服务后可直接加载发起接口请求
const html = fs.readFileSync("./proxy.html");// 获取配置文件里的serve配置内容
const config = require("./xxx.config.js");http.createServer((req, res) => {// 获取url接口端口号后面的名称const { pathname } = url.parse(req.url);// 获取配置文件中的 配置 如 /apiconst proxyList = Object.keys(config.serve.proxy);// 若是请求的接口中包含代理配置的内容,进行反向代理if (proxyList.includes(pathname)) {const proxy = createProxyMiddleware(config.serve.proxy[pathname]);// 进行代理proxy(req, res);return;}// 把html内容与服务整合在一起res.writeHead(200, {"Content-Type": "text/html",});res.end(html);}).listen(8080, () => {console.log("启动了一个80服务");});
nodejs反向代理基本实现思路如上

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

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

相关文章

深度解析:云计算的三宝——IaaS、PaaS和SaaS

4月22日&#xff0c;腾讯宣布旗下协作SaaS产品全面接入腾讯混元大模型&#xff0c;除去企业微信、腾讯会议、腾讯文档等“一门三杰”产品&#xff0c;腾讯乐享、腾讯电子签、腾讯问卷、腾讯云AI代码助手等协作SaaS产品也都已实现智能化升级。大模型应用落地再加速。 那么什么是…

Java基础入门day37

day37 js小案例 全选&#xff0c;全不选和反选 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…

2024年深圳杯东三省数学建模联赛A题论文首发第二种思路

深圳杯A题论文代码分享资料链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1L2NVgoefSW-yuqZjEB3wcw 提取码&#xff1a;sxjm 问题一 数据转换&#xff1a; 首先&#xff0c;我们将监测站的经纬度坐标转换为基于米的笛卡尔坐标系。这是因为在地面上的大尺度距离…

HarmonyOS开发案例:【音乐播放器】

介绍 使用ArkTS语言实现了一个简易的音乐播放器应用&#xff0c;主要包含以下功能&#xff1a; 播放应用中的音频资源文件&#xff0c;并可进行上一曲、下一曲、播放、暂停、切换播放模式&#xff08;顺序播放、单曲循环、随机播放&#xff09;等操作。结合后台任务管理模块&…

使用python批量采集国家法律法规数据库——科学学习使用!遵守法律!绿色合规!

模块使用: 使用Python的requests模块进行网络请求操作。 目标网址: 国家法律法规数据库网址 实现步骤: 模拟浏览器请求: 设置请求头信息模拟浏览器行为。 请求网址并循环获取数据: 循环页面以获取数据&#xff0c;设置查询参数并使用requests.get()请求数据。 提取数据并保存文…

安全小课堂丨什么是暴力破解?如何防止暴力破解

什么是暴力破解&#xff1f; 暴力破解也可称为穷举法、枚举法&#xff0c;是一种比较流行的密码破译方法&#xff0c;也就是将密码进行一一推算直到找出正确的密码为止。比如一个6位并且全部由数字组成的密码&#xff0c;可能有100万种组合&#xff0c;也就是说最多需要尝试10…

JWT原理解析

一、概述 虽然现在很多的开发框架会支持JWT的使用&#xff0c;但是对JWT还是没有一个详细的了解&#xff0c;有很多疑惑&#xff1a; JWT比之前的session或者token有什么好处&#xff1f;JWT的构成元素是什么&#xff1f;JWT从生成到使用的详细流程&#xff1f; 二、 JWT 2…

SPI Flash and External SPI RAM(基于ESP32)

主要参考资料&#xff1a; 乐鑫ESP-IDF资料SPI Flash API: https://docs.espressif.com/projects/esp-idf/zh_CN/v5.1/esp32s3/api-reference/peripherals/spi_flash/index.html 乐鑫ESP-IDF资料SPI Flash and External SPI RAM Configuration: https://docs.espressif.com/pro…

场景 - 分库分表

分什么 数据量大分表&#xff0c;并发大分库 分表字段如何选择 如果对交易订单进行分表&#xff0c;可以选择的东西很多&#xff0c;比如说商户id&#xff0c;用户id&#xff0c;地区等等 分表的时候要考虑到数据倾斜问题 数据倾斜 比如说按商户号进行分表&#xff0c;一共…

pnpm 安装后 node_modules 是什么结构?为什么 webpack 不识别 pnpm 安装的包?

本篇研究&#xff1a;使用 pnpm 安装依赖时&#xff0c;node_modules 下是什么结构 回顾 npm3 之前&#xff1a;依赖树 缺点&#xff1a; frequently packages were creating too deep dependency trees, which caused long directory paths issue on Windowspackages were c…

2024年 Flutter 面试题大全(持续更新中)

提示&#xff1a;页面中按 Ctrl F 查找关键字&#xff0c;点击链接跳转到详情 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#xff0c;51CTO专家博主。2023博客之星TOP153。 &#x1f…

Php 通过 FFmpeg 获取远程视频的时长和截图

突然发现 FFmpeg 这个软件还可以直接拉取远程视频的相关信息&#xff0c;也就是可以不通过下载视频到本地的方式&#xff0c;直接远程去获取视频时长和截图。 假设我们的视频url是&#xff1a;http://my.com/a.mp4 第一步&#xff0c;Linux 安装 FFmpeg 软件 第二步&#xf…

Day 20 Linux的WEB服务——apache

WEB服务简介 目前主流的web服务器软件 Linux&#xff1a;apache &#xff0c; nginx Windows-server&#xff1a;IIS 服务器安装nginx或apache后&#xff0c;叫做web服务器&#xff08;又称WWW服务器&#xff09; web服务器软件属于C/S框架模型 web服务器是一种被动程序只…

薄板样条插值TPS原理以及torch和opencv实现

薄板样条插值TPS原理以及torch和opencv实现 1、薄板样条插值TPS原理概述原理以及公式推导2、torch实现3、opencv实现1、薄板样条插值TPS原理 概述 薄板样条(Thin Plate Spline),简称TPS,是一种插值方法,可找到通过所有给定点的“最小弯曲”光滑曲面。因为它一般都是基于…

[Android]Jetpack Compose页面跳转和传值

一、页面跳转和返回 1.添加 Navigation 依赖 在你的 build.gradle &#xff08;Module&#xff09;文件中, 添加 Navigation Compose 依赖。 dependencies {implementation ("androidx.navigation:navigation-compose:2.5.3") } 2.创建跳转页面 接下来&#xff…

MQTT协议应用场景

MQTT协议应用场景 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;它设计用于低带宽、高延迟或不可靠的网络环境。由于其高效、简单和可靠性&#xff0c;MQTT在多种应用场景中得到了广泛的应用。…

leetcode hot100_part25

2024/4/23 56.合并区间 略 189.轮转数组 使用额外数组 遍历老数组&#xff0c;每个位置的元素放到新数组的位置&#xff08;取余&#xff09;。 环状替换 这个思路也想到了但是没想出来。 也就是连续跳&#xff0c;从i位置跳到它应该在(取余后)的位置x&#xff0c;再从x位…

UE4网络图片加载库(带内存缓存和磁盘缓存)

UE4网络图片加载库,带内存缓存和磁盘缓存,支持自定义缓存大小,支持蓝图和C++代码调用 1、调用示例 2、对外暴露函数 3、源代码-网络模块 KeImageNet.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreM…

Vue基于高德地图API封装一个地图组件

一、参考资料 高德开放平台 | 高德地图API (amap.com) 二、安装及配置 pnpm i vuemap/vue-amap --save man.ts 密钥及安全密钥需要自己到高德地图开放平台控制台获取. import { createApp } from vue import App from ./App.vue import router from ./router i…

java实现解析html获取图片或视频url

一、前言 有时在实际项目中&#xff0c;比如发布某篇文章&#xff0c;需要取文章中的某张图片作为封面&#xff0c;那么此时需要文章内容&#xff0c;获取html内容中的图片地址作为封面&#xff0c;下面讲下如何获取html中的图片或视频地址。 二、实现 1.先定义一个工具类&…