2013-10-08 4 views
0

Я нашел, что прост в использовании node-http-proxy для маршрутизации подкаталога в разные порты на локальном сервере. Однако, я не нашел, есть ли способ запустить пользовательскую функцию при выполнении маршрутизации. То, что я хочу сделать, это:Запуск пользовательской функции при использовании таблицы маршрутизации в обратном прокси с узлом-http-прокси

  1. Если служба на целевом порту не работает, запустите его, а затем закончить маршрут
  2. Если служба уже запущена на целевом порту, просто сделать маршрут

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

Могу ли я сделать что-то вроде этого?

var options = { 
    route: { 
     '/task1' : customFunc('3000'), 
     '/task2' : customFunc('3001'), 
    } 
} 

httpProxy.createServer(options).listen(80); 

ответ

1

Вы не можете назначить функцию в качестве значения пути, поскольку это значение анализируется как URL-адрес. See here.

Вместо того, что вы можете сделать, это перехват запросов, прежде чем он попадает на маршрутизатор, запустить службы по мере необходимости, а затем направляет запрос обратно к маршрутизатору:

var init = function(req, res, next){ 
    if(req.url.indexOf('task1') > -1 && !serviceIsRunning()){ 
     startService(); 
     next(); // forward req back to router 
    } else { 
     // no need to do anything, move request along 
     next(); 
    }  
} 

httpProxy.createServer('localhost', options, init).listen(80);