Запрос прокси больше, чем вовремя, выдает ошибку

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

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)

Как мне этого избежать


person 07_05_GuyT    schedule 07.07.2015    source источник
comment
Я не эксперт по узлам, но похоже, что вы запускаете сервер дважды.   -  person Evan Knowles    schedule 07.07.2015
comment
@EvanKnowles-правильно, но как мне избежать этого элегантным способом, поскольку мне нужно сделать это только один раз, и когда у меня есть дополнительный вызов на этот порт, я хочу просто направить вызов на новый порт сервера...   -  person 07_05_GuyT    schedule 07.07.2015
comment
похоже, вы пытаетесь создать прокси-сервер для каждого запроса. См. пример здесь   -  person hassansin    schedule 07.07.2015
comment
@hassansin-спасибо, но это не тот случай, приведенный вами пример очень прост, в моем приложении я помещаю его в функцию, и каждый раз, когда вы запускаете метод get, он вызывается, есть способ избежать этого? если я создал новый сервер во втором вызове, я просто хочу перенаправить его на новый сервер с новым портом...   -  person 07_05_GuyT    schedule 07.07.2015


Ответы (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
  });    
}
person hassansin    schedule 07.07.2015