gpt4 book ai didi

NODE.JS:如何根据请求中收到的数据代理到具有可变目标的主机?

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:25 24 4
gpt4 key购买 nike

我需要使用node-http-proxy库来代理到具有可变目标的主机,具体取决于req中收到的数据,假设我需要找到一个标签并根据此标签路由到主机。我的代码是:

var http = require('http'),
httpProxy = require('http-proxy'),
proxy = httpProxy.createProxyServer({});

var miTarget='web:CountryName';
var inicio = '<'+miTarget+'>';
var fin = '</'+miTarget+'>';

var server = http.createServer(function(req, res) {
var miTag = '';
req.on('data', function (data) {
miTag = data.toString().split(inicio)[1].split(fin)[0];
});

req.on('end', function () {
console.log('miTag!!!!!!:'+miTag);
if(miTag=='Portugal') {
proxy.web(req, res, {target: 'http://www.webservicex.net'});
}
else {
proxy.web(req, res, {target: 'http://localhost:1337'});
}

});
});

console.log("listening on port 80")
server.listen(80);

此代码不起作用...任何人都可以帮我解决这个问题吗?对我来说最重要的是在 req 中接收到 miTag 数据后执行 proxy.web(): req.on('data', function (data) {}

最佳答案

我曾经为一个小个人项目做过类似的事情。您可以使用 res.locals 作为存储每个请求上下文的安全位置(比使用全局安全得多)。

app.use('/proxy', function(req, res, next) {
// Do whatever you need to do to create targetUrl (a URL object)
var targetUrl = whatever(req);

// Save the targetUrl path so we can access it in the proxyReq handler
res.locals.path = targetUrl.path;

// Initiate the proxy
var options = {
prependPath: false,
target: targetUrl.format(),
changeOrigin: true,
hostRewrite: targetUrl.host,
protocolRewrite: targetUrl.protocol.replace(/:$/, '')
};

proxy.web(req, res, options);
});

然后设置一个使用保存的 targetUrl 路径的 proxyReq 处理程序。

proxy.on('proxyReq', function(proxyReq, req, res, options) {
if (res.locals.path) {
proxyReq.path = res.locals.path;
}
});

关于NODE.JS:如何根据请求中收到的数据代理到具有可变目标的主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708971/

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