gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:31 27 4
gpt4 key购买 nike

如何在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com