2013-10-08 2 views
0

J'ai trouvé qu'il est facile d'utiliser node-http-proxy pour router un sous-répertoire vers différents ports sur un serveur local. Cependant, je n'ai pas trouvé s'il existe un moyen d'exécuter une fonction personnalisée lors du routage. Ce que je veux faire est:Exécution d'une fonction personnalisée lors de l'utilisation de la table de routage sur un proxy inverse avec node-http-proxy

  1. Si le service sur le port cible ne fonctionne pas, lancez-le, puis terminer la route
  2. Si le service est déjà en cours d'exécution sur le port cible, il suffit de la route

Je ne demande pas comment vérifier le service et le démarrer, juste comment avoir une fonction appelée chaque fois qu'un réacheminement va avoir lieu.

Puis-je faire quelque chose comme ça?

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

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

Répondre

1

Vous ne pouvez pas affecter une fonction en tant que valeur de chemin, car cette valeur est analysée en tant qu'URL. See here.

Au lieu de cela, ce que vous pouvez faire est d'intercepter les requêtes avant qu'elle ne touche le routeur, démarrez vos services au besoin, puis transmettre la demande au routeur:

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); 
Questions connexes