【问题标题】:Proxy request more than on time provide error代理请求超过时间提供错误
【发布时间】:2025-11-28 08:20:03
【问题描述】:

我想代理对新端口的调用,所以我将创建服务器的所有逻辑封装到一个函数中,例如

var appRouter = express.Router();
app.use(appRouter);


appRouter.route('*')
    .get(function (req, res) {
        proxyRequest(req, res)
    }

在代理请求函数中我放了以下代码

function proxyRequest(req, res) {

    httpProxy = require('http-proxy');
    var proxy = httpProxy.createProxyServer({});
    var hostname = req.headers.host.split(":")[0];

    proxy.web(req, res, {
        target: 'http://' + hostname + ':' + 5000
    });
    http.createServer(function (req, res) {
        console.log("App proxy new port is: " + 5000)
        res.end("Request received on " + 5000);
    }).listen(5000);

}

问题是,当我第一次调用时,我看到代理工作正常,并在第二次点击浏览器时在新服务器端口 5000 中侦听错误

Error: listen EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1146:14)

我应该如何避免这种情况

【问题讨论】:

  • 我不是节点专家,但听起来你要启动服务器两次。
  • @EvanKnowles-Correct 但我应该如何以优雅的方式避免它,因为我只需要这样做一次,当我对该端口有额外的调用时,我只想将调用路由到新服务器港口...
  • 看起来您正在尝试为每个请求创建一个代理服务器。查看示例here
  • @hassansin-thanks 但情况并非如此,您提供的示例非常简单,在我的应用程序中,我将它放在一个函数中,每次运行 get 方法时都会调用它,有一个避免它的方法?如果我在第二次调用中创建了新服务器,我只想将它路由到具有新端口的新服务器...

标签: javascript node.js express node-http-proxy node-request


【解决方案1】:

proxyRequest函数中删除代理服务器创建逻辑

试试这个:

httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
http.createServer(function (req, res) {
    console.log("App proxy new port is: " + 5000)
    res.end("Request received on " + 5000);
}).listen(5000);

function proxyRequest(req, res) {
  var hostname = req.headers.host.split(":")[0];
  proxy.web(req, res, {
    target: 'http://' + hostname + ':' + 5000
  });    
}

【讨论】: