2012-06-29 7 views
5

Estoy usando el middleware express/connect vhost y estoy un poco confundido sobre cómo se debe usar. Quiero que un conjunto de rutas se apliquen a los hosts con subdominios y otro conjunto que se aplique a los hosts sin subdominios.Especificación de rutas por subdominio en Express utilizando el middleware vhost

En mi archivo app.js, tengo

var app = express.createServer(); 

app.use...(middlware)... 
app.use(express.vhost('*.host', require('./domain_routing')("yes"))); 
app.use(express.vhost('host', require('./domain_routing')("no"))); 
app.use...(middlware)... 

app.listen(8000); 

y luego en domain_routing.js:

module.exports = function(subdomain){ 

    var app = express.createServer(); 

    require('./routes')(app, subdomain); 

    return app; 
} 

y luego en routes.js planeo ejecutar conjuntos de rutas, dependiendo de si la variable subdominio pasado es "yes" o "no".

¿Estoy en el camino correcto o no es así como usa este middleware? Estoy un poco confundido sobre el hecho de que se están creando dos instancias de servidor app (así es como los ejemplos en la web parecen hacer cosas). ¿Debo pasar la instancia del servidor original app y simplemente usar eso en lugar de crear uno diferente en lugar del enrutador del subdominio?

Respuesta

2

Sí, está en el camino correcto. Usted debe tener una instancia de servidor diferente para cada uno de los servidores virtuales. Ya sea un http.Server o express app.

Si pasa el app original, se enviará a la aplicación original una solicitud que haya enviado al vhost. Entonces, a menos que el vhost tenga rutas que no se usan en el servidor original, recibirá una respuesta como si la solicitud se hubiera enviado al servidor original.

A partir de los documentos de conexión

connect() 
    .use(connect.vhost('foo.com', fooApp)) 
    .use(connect.vhost('bar.com', barApp)) 
    .use(connect.vhost('*.com', mainApp)) 
+0

Gracias! Y mi otra pregunta es que si especifico middleware para ser utilizado para la instancia del servidor original, y luego uso instancias de servidor separadas para los vhosts, ¿el middleware utilizado para el servidor original se transferirá al vhost? ¿O debería usar middleware exclusivamente en los vhosts (excepto el middleware de vhost en el servidor original) Básicamente, estoy buscando una manera perfecta de usar middleware en todos los posibles hosts, en lugar de tener que usar explícitamente el mismo middleware en cada uno de los fantasmas que es algo repetitivo ... – user730569

+0

No, no necesita usar middleware exclusivamente en todos los hosts. Cualquier middleware que quiera usar para todas las aplicaciones puede ser '.use''d antes de que un vhost sea' .use''d –

+0

¡Eso es genial! Pero por curiosidad, ¿cómo funciona eso? Supongo que estoy un poco confundido en cuanto a qué 'server.emit (" solicitud ", req, res);' hace detrás de las escenas. – user730569

Cuestiones relacionadas