使用express.js 进行代理

2023-11-24

为了避免同域 AJAX 问题,我希望我的 Node.js Web 服务器转发来自 URL 的所有请求/api/BLABLA例如到另一台服务器other_domain.com:3000/BLABLA,并透明地向用户返回该远程服务器返回的相同内容。

所有其他 URL(除了/api/*)将直接提供服务,无需代理。

如何使用 Node.js + Express.js 实现此目的?你能给出一个简单的代码示例吗?

(网络服务器和远程服务器3000服务器在我的控制之下,都运行node.js和express.js)


到目前为止我发现了这个https://github.com/http-party/node-http-proxy,但是阅读那里的文档并没有让我变得更明智。我最终得到

var proxy = new httpProxy.RoutingProxy();
app.all("/api/*", function(req, res) {
    console.log("old request url " + req.url)
    req.url = '/' + req.url.split('/').slice(2).join('/'); // remove the '/api' part
    console.log("new request url " + req.url)
    proxy.proxyRequest(req, res, {
        host: "other_domain.com",
        port: 3000
    });
});

但没有任何内容返回到原始 Web 服务器(或最终用户),所以运气不好。


注意request自 2020 年 2 月起已被弃用,因此出于历史原因,我将在下面留下答案,但请考虑转向此中列出的替代方案issue,移至本机内置的 Fetch API(从 Node 18 开始),或使用快速 HTTP 代理.

原答案

我做了类似的事情,但我用了request反而:

var request = require('request');
app.get('/', function(req,res) {
  //modify the url in any way you want
  var newurl = 'http://google.com/';
  request(newurl).pipe(res);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用express.js 进行代理 的相关文章

随机推荐

  • 在 C 中生成随机布尔值的简单方法是什么? [复制]

    这个问题在这里已经有答案了 我想生成一个随机布尔值以在游戏中使用 因此它不需要加密安全 我会用stdbool h在我的代码中 我也做了 include
  • TensorFlow:使用 tf.merge_all_summaries() 时出现 PlaceHolder 错误

    我收到占位符错误 我不知道这意味着什么 因为我正确映射sess run y y X X 我在这里提供了一个功能齐全的 MWE 来重现错误 import tensorflow as tf import numpy as np def init
  • 如何使用 ICU 将 Unicode 代码点转换为 C++ 中的字符?

    不知怎的 我在谷歌上找不到答案 我在搜索时可能使用了错误的术语 我正在尝试执行一个简单的任务 将表示字符的数字转换为字符本身 如下表所示 http unicode table com en 0460 例如 如果我的号码是 47 即 我可以将
  • iPhone SDK 上的 sqlite 数据库磁盘映像格式错误

    我在 iPhone SDK 上使用 SQLite 作为数据库后端的新应用程序时遇到问题 有时 我的应用程序会停止将数据加载到 UITableViews 通过管理器下载设备数据库后 我可以通过命令行访问 SQLite 数据库 我可以很好地查询
  • 为什么 Windows 窗体设计器对于 FromArgb 将 int 转换为 byte,然后再转换回 int?

    今天我查看了一些代码 看到了类似以下内容 var colour Color FromArgb int byte 227 int byte 213 int byte 193 当我问为什么会这样时 由于 Resharper 确认所有演员都是多余
  • XPath随机选择一个子节点

    我正在使用 Selenium IDE 进行一些 Web 应用程序测试 并且想引入一些随机性来分散我们的测试 我目前正在使用 SeleniumstoreAttributeValue 您在其中给它一个 XPath 表达式 它会存储与其匹配的第一
  • 为什么这个Python程序不能运行? AttributeError:“模块”对象没有属性

    我写了一个非常简单的Python程序 usr bin env python import random x random uniform 1 1 print str x 我从命令提示符运行它 python random py 它返回错误 T
  • 在 JavaScript 中将两个字节转换为有符号 16 位整数

    在 JavaScript 中 我需要将两个字节转换为 16 位整数 以便可以将音频数据流转换为带符号的 PCM 值数组 大多数将字节转换为 16 位整数的在线答案都使用以下内容 但它不适用于负数 var result byteA 0xFF
  • es6 导入中换行的 JsFormat 规则

    JsFormat for Sublime Text 3 符合大多数 ES6 标准 但是 在自动格式化导入语句时 它会向对象导入添加一个新行 预格式化行如下所示 import func1 func2 func3 from some modul
  • 让移动的矩形更加平滑

    我想让我的矩形的 动画 更加流畅 目前它确实很笨拙 我知道其中的原因 其中一个坐标先于另一个坐标成为所需值 例如 如果我当前位于 0 0 并且需要转到 150 75 并且我每秒均等地递增每个值 则 y 线将比 x 线快得多 var canv
  • 为什么使用 RxJS .asObservable() getter/factory 函数模式?

    在许多使用 RxJS 的代码库中 我似乎遇到了暴露私有的模式Subjects as Observables via a getter或正常getObservable 功能 我的问题不是为什么 asObservable 被使用 但为什么它看起
  • 如何缩小 HTML 代码?

    我的想法是somehow缩小服务器端的 HTML 代码 以便客户端接收更少的字节 缩小 是什么意思 不拉拉链 更像是 jQuery 创建者所做的 min js版本 换句话说 我需要删除不必要的空格和换行符 但我无法删除太多 HTML 表示的
  • 您可以将扩展方法设为静态/共享吗?

    好吧 我可能在这里误解了一些东西 但是 据我所知 扩展方法必须包含在模块中 而不是类中 您不能将模块中的方法设为静态 共享 因此 如果不实例化类 就无法在类上使用扩展方法 换句话说 您不能在 String 上创建名为 MyExtension
  • 如何在Matlab中将原点设置为轴的中心

    当我在 Matlab 中绘制函数 f x 时 例如正弦函数 我得到的图形是这样的 我想以一种相当不同的方式绘制它 例如用 Mathematica 生成的 注意轴位置 连同刻度 以及 x 和 y 标签位置 任何帮助将不胜感激 因为并非所有读者
  • Nuget包更新问题

    我在 Visual Studio 2013 中更新 Nuget 包时遇到问题以寻求解决方案 我右键单击该解决方案 选择 管理解决方案包 然后在更新选项卡中选择 全部更新 一切似乎都更新得很好 但是 在更新选项卡中 已更新的软件包仍然显示为需
  • JavaFX 是开源的吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 安装 JDK 时 我在 C Program Files Java jdk1 7 xxx 文件夹中找到 src zip 但找不到 javafx 源代码
  • python 池 apply_async 和 map_async 不会在满队列上阻塞

    我对 python 相当陌生 我正在使用多处理模块来读取标准输入上的文本行 以某种方式转换它们并将它们写入数据库 这是我的代码片段 batch pool multiprocessing Pool 20 i 0 for i content i
  • 如何让搜索引擎索引数据库驱动的内容?

    我怎样才能使数据库中的内容可供搜索引擎 例如谷歌 用于索引 Example mysql 中的表有一个名为 Headline 的字段 它等于 BMW M3 2005 我的网站名称是 MySite 用户在谷歌中输入 BMW M3 2005 My
  • 从 JDBC 调用 Oracle 面向对象的 PL/SQL 成员过程

    在面向对象的 PL SQL 中 我可以向类型添加成员过程和函数 这里给出一个例子 create type foo type as object foo number member procedure proc p in number mem
  • 使用express.js 进行代理

    为了避免同域 AJAX 问题 我希望我的 Node js Web 服务器转发来自 URL 的所有请求 api BLABLA例如到另一台服务器other domain com 3000 BLABLA 并透明地向用户返回该远程服务器返回的相同内