Запустите пользовательскую функцию при использовании таблицы маршрутизации на обратном прокси-сервере с node-http-proxy

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

  1. Если служба на целевом порту не работает, запустите ее, а затем завершите маршрут
  2. Если служба уже работает на целевом порту, просто выполните маршрут

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

Могу ли я сделать что-то подобное?

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

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

1 ответ

Решение

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

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

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);
Другие вопросы по тегам