Javascript 检查在新端口上运行的应用程序

Javascript 检查在新端口上运行的应用程序,javascript,node.js,express,node-http-proxy,node-request,Javascript,Node.js,Express,Node Http Proxy,Node Request,我需要创建一个应用程序来获取特定端口的请求,并将其代理到不同端口上的新服务器 例如,以下端口3000将作为端口9000的代理 实际上,您在9000(引擎盖下)上运行应用程序,因为客户机中的用户单击3000 我试着做些类似的事情 var proxy = httpProxy.createProxyServer({}); http.createServer(function (req, res) { var hostname = req.

我需要创建一个应用程序来获取特定端口的请求,并将其代理到不同端口上的新服务器

例如,以下端口3000将作为端口9000的代理 实际上,您在9000(引擎盖下)上运行应用程序,因为客户机中的用户单击3000

我试着做些类似的事情

var proxy = httpProxy.createProxyServer({});

            http.createServer(function (req, res) {

                var hostname = req.headers.host.split(":")[0];
                var pathname = url.parse(req.url).pathname;
                proxy.web(req, res, {
                        target: 'http://' + hostname + ':' + 9000
                    });
     var proxyServer = http.createServer(function (req, res) {

                    res.end("Request received on " + 9000);
                });
                proxyServer.listen(9000);

            }).listen(3000, function () {

     });
  • 这样做正确吗
  • 如何测试它?我询问,因为如果我在端口3000中运行节点应用程序,我无法将第一个URL放入客户端,因为该端口已被占用。有解决办法吗
  • 关于代理服务器的各种用法,目前还很少有研究。下面是一个基本代理服务器的简单示例:

    var http = require("http");
    var httpProxy = require('http-proxy');
    
    /** PROXY SERVER **/
    var proxy = httpProxy.createServer({
      target:'http://localhost:'+3000,
      changeOrigin: true
    })
    
    // add custom header by the proxy server
    proxy.on('proxyReq', function(proxyReq, req, res, options) {
      proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
    });
    
    proxy.listen(8080);
    
    /** TARGET HTTP SERVER **/
    http.createServer(function (req, res) {
      res.writeHead(200, { 'Content-Type': 'text/plain' });
    
      //check if the request came from proxy server
      if(req.headers['x-special-proxy-header'])
        console.log('Request received from proxy server.')
    
      res.write('request successfully proxied to: ' + req.url + '\n' + JSON.stringify(req.headers, true, 2));
      res.end();
    }).listen(3000);
    
    要测试代理服务器是否工作或请求是否来自代理服务器,请执行以下操作: 我添加了一个
    proxyReq
    侦听器,它添加了一个自定义头。您可以从该标头判断请求是否来自代理服务器

    因此,如果您访问
    http://localhost:8080/a/b/c
    您将看到
    req.headers
    的标题如下:

    'X-Special-Proxy-Header': 'foobar'
    
    仅当客户端向8080端口发出请求时,才设置此标头


    但是对于
    http://localhost:3000/a/b/c
    ,您将看不到这样的标头,因为客户端正在绕过代理服务器,并且该标头从未设置。

    谢谢!但是我该怎么测试呢?你能解释一下吗?谢谢Hassasin!投票通过了!最后一个问题是,现在我有了手动切换到新代理端口所需的新服务器,我应该如何将调用导航到新端口?在上面的示例中,只需将8080替换为3000,将3000替换为90000谢谢,但当我单击localhost:3000时,我在json“host”:“localhost:3000”中获得了3000,我不需要获得9000?我明白了。您可以设置
    proxyReq.setHeader('host','localhost:9000')
    ——但可能有更好的方法。我会调查的。