2012-06-27 14 views
44

Tengo varias aplicaciones Node (compiladas en Express framework).Ejecutando varias aplicaciones Node (Express) en el mismo puerto

Ahora ellos han colocado como esto -

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

Ahora quiero ejecutar estas 3 aplicaciones en el mismo puerto (por ejemplo 8080). Es eso posible ?

Una cosa a destacar es que, cada aplicación tiene rutas comunes como estos -

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

Básicamente quiero hacerlo como puedes hacer con la configuración de Apache/PHP.

Así, con una pila LAMP cuando se tiene -

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

puede acceder fácilmente a ellos como diferentes aplicaciones desde -

  • localhost/app1
  • localhost/app2
  • localhost/app3
+1

posible duplicado de [Cómo montar las sub-aplicaciones express.js?] (Http://stackoverflow.com/questions/8514106/how-to-mount-express-js-sub-apps) – lanzz

Respuesta

45

Puede utilizar app.use():

app 
    .use('/app1', require('./app1/index').app) 
    .use('/app2', require('./app2/index').app) 
    .listen(8080); 
+0

¿Esto será posible si mis aplicaciones de Node se hicieron usando Restify? * Pregúntame si esta pregunta no es lo suficientemente específica o clara. * – junerockwell

+0

No, 'app.use()' es específico de 'express' y no admite ningún servidor HTTP que no siga el patrón de llamada de complemento expreso. –

+0

Supongo que si una aplicación falla, el resto también lo hará. –

23

Usted podría funcionar como aplicaciones separadas a diferentes puertos de escucha y luego tener un proxy (como https://github.com/nodejitsu/node-http-proxy/) sirve de todo, en 8080, dependiendo de la dirección URL solicitada.

gustan:

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' 
    } 
}; 

Obras como encanto para mí (http://nerdpress.org/2012/04/20/hosting-multiple-express-node-js-apps-on-port-80/). Yo no estaba tan interesado en tenerlos montados como sub-aplicaciones, como se sugiere en los comentarios porque quería que se ejecuten de forma independiente ...

+1

Antes que nada, No quiero configurar múltiples vhosts. Lo quiero como vhost/app1, vhost/app2, vhost/app3. en segundo lugar, probé el segundo método de la publicación de blog a la que me vinculó, pero realmente no funciona para mí y no sé si encajará en mi caso de uso o no. alguna idea ? Ah, y también no busca usar un proxy inverso en este punto ... – user1437328

+0

Por supuesto, puede ejecutar sus subapps envuelto en una aplicación y manejar el enrutamiento internamente. Personalmente, no me gusta que mis aplicaciones dependan tanto una de la otra, cuando se trata de fallas. Es por eso que prefiero ejecutarlos en diferentes puertos. –

+0

no tiene que configurar múltiples vhost para lograr esto con node-http-proxy, actualizaré la respuesta con un ejemplo –

0

Puede crear una aplicación principal (por ejemplo, aplicación) paralela a sus aplicaciones, y haga que inicialice las aplicaciones secundarias (en su caso, aplicación1, aplicación2, aplicación3) usando app.use ('', require ('./ app1/yourApp.js').

Todas sus aplicaciones (app1, app2, app3) necesitan crear aplicaciones y exportarlas usando var app = module.exports = express(); No necesita crear una instancia de servidor o llamar a app.listen en todas las subapps; todas las sub-aplicaciones pueden ser servidas a través del puerto de escucha de la aplicación principal.

Cuestiones relacionadas