2015-07-07 3 views
0

Я хотел прокси вызов к новому порту, так что я инкапсулировать всю логику создания сервера в функцию какProxy запросить больше, чем на время обеспечить ошибку

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) 

Как мне избежать этой логики создания прокси-сервера

+0

Я не эксперт узла, но это звучит, как вы запускаете сервер дважды. –

+0

@ EvanKnowles-Правильно, но как я должен избегать этого элегантным способом, так как мне нужно сделать это всего один раз, и когда у меня есть дополнительный вызов на этот порт, я хочу просто перенаправить вызов на новый серверный порт ... –

+0

выглядит вы пытаетесь создать прокси-сервер по каждому запросу. См. Пример [здесь] (http://stackoverflow.com/a/31257399/1807881) – hassansin

ответ

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 
    });  
}