web-dev-qa-db-fra.com

Exécution de plusieurs applications Node (Express) sur le même port

J'ai plusieurs applications de nœud (construites sur la structure Express).

Maintenant je les ai placés comme ça -

  • /var/www/app1
  • /var/www/app2
  • /var/www/app3

Maintenant, je veux exécuter ces 3 applications sur le même port (disons 8080). Est-ce possible ?

Une chose à noter est que, chaque application a des itinéraires communs comme ceux-ci -

  • app.get('/', func...);
  • app.get('/about', func...);
  • app.post('/foo', func...);
  • app.post('/bar', func...);

En gros, je veux le faire comme vous pouvez le faire avec la configuration Apache/PHP.

Donc, avec une pile de lampe lorsque vous avez -

  • /var/www/app1
  • /var/www/app2
  • /var/www/app3

Vous pouvez facilement y accéder sous différentes applications à partir de -

  • localhost/app1
  • localhost/app2
  • localhost/app3
49
user1437328

Vous pouvez utiliser app.use() :

app
  .use('/app1', require('./app1/index').app)
  .use('/app2', require('./app2/index').app)
  .listen(8080);
54
user1437328

Vous pouvez les exécuter en tant qu'applications distinctes écoutant différents ports, puis disposer d'un proxy (tel que https://github.com/nodejitsu/node-http-proxy/ ), desservant tout le 8080 en fonction de l'URL demandée.

comme:

var options = {
  router: {
    'foo.com/baz': '127.0.0.1:8001',
    'foo.com/buz': '127.0.0.1:8002',
    'bar.com/buz': '127.0.0.1:8003'
  }
};

Fonctionne comme un charme pour moi ( http://nerdpress.org/2012/04/20/hosting-multiple-express-node-js-apps-on-port-80/ ). Je n'aimais pas tellement qu'ils soient montés en tant que sous-applications, comme suggéré dans les commentaires, car je voulais qu'ils fonctionnent de manière indépendante ...

27
Max Girkens

Vous pouvez créer une application principale (par exemple, une application principale) parallèle à vos applications et l'initialiser (dans votre cas, app1, app2, app3) en utilisant app.use ('', require ('./ app1/yourApp.js ').

Toutes vos applications (app1, app2, app3) doivent créer une application et l'exporter à l'aide de Var app = module.exports = express (); Il n'est pas nécessaire de créer une instance de serveur ou d'appeler app.listen dans tous les cas. les sous-applications; toutes les sous-applications peuvent être desservies via le port d'écoute de l'application principale.

0
Kamesh Chauhan