node.js - 在 nodejs 中试图让 http-proxy 转发通过查询字符串参数传递的请求

标签 node.js proxy http-proxy node-http-proxy

如何在 nodejs 中使用查询字符串参数代理请求,我目前正在使用 express 和 http-proxy?

我有一个 nodejs 应用程序,它使用 express 和 http-proxy 模块来代理来 self 端某些路径的 HTTP GET 请求到在同一服务器但不同端口上运行的第三方 API(因此遇到同源问题,需要代理)。在我想使用查询字符串参数(即“?name=value”)在后端 API 上调用 REST 函数之前,这一切正常。然后我得到一个 404。

var express = require('express');
var app = express();
var proxy = require('http-proxy');
var apiProxy = proxy.createProxyServer();

app.use("/backend", function(req,res){
    apiProxy.web(req,res, {target: 'http://'+ myip + ':' + backendPort + '/RestApi?' + name + '=' + value});
});

Chrome 的控制台显示:

"GET http://localhost:8080/backend 404 (Not Found)"

注意:我稍后会在 express 中使用其他东西,但不会在代理线路之前使用,并且在路由路径时我会从更具体到更一般。可以在浏览器中使用相同的协议(protocol)直接访问后端:://url:port/path?name=value 没有问题。

最佳答案

我通过更改 req.url 以包含查询字符串参数并将主机名仅传递给 apiProxy.web target 来实现此目的参数:

app.use('/*', function(req, res) {
    var proxiedUrl = req.baseUrl;
    var url = require('url');
    var url_parts = url.parse(req.url, true);
      if (url_parts.search !== null) {
        proxiedUrl += url_parts.search;
    }

    req.url = proxiedUrl;

    apiProxy.web(req, res, {
      target: app.host
    });
});

关于node.js - 在 nodejs 中试图让 http-proxy 转发通过查询字符串参数传递的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27107376/

相关文章:

javascript - 在 Express 中监听 MongoDB 的变化

javascript - 如何检查 Node js应用程序中请求url参数是否不为空?

ios - SCNetworkReachability 是否遵守 HTTP 代理设置?

networking - 如何在公司防火墙后面使用 cygwin

Kubernetes:在 K8s 中,在入口及其服务之间设置自定义代理的惯用方式是什么?

android - Nodejs socket.io 服务器与 Android 连接但不发送消息

node.js - 在 Mongodb 中使用 $exists 以及动态键名称和 Node 的 native 驱动程序

java - 在 nginx 代理后面运行的 tomcat webapp 中的远程 IP

python - aiohttp中的代理请求

linux - 从 TCP 连接获取 HTTP header