¿Cómo puedo configurar múltiples subdominios en Express.js o Connect.js?

Estoy acostumbrado a trabajar en httpd (Apache), que proporciona una forma de configurar subdominios asignados a un directorio. ¿Cómo puedo hacer lo mismo en Connect.js / Express.js? Veo que lo único que tengo son rutas que no estoy seguro de cómo puedo usar para configurar subdominios. Tengo subdominios como m.mysite.com, sync.mysite.com

¿Alguien puede ayudar?

O alternativamente puedes usar vhost .

Luego, cree varios sitios en su propio directorio y exporte la aplicación exprés, ej. /path/to/m/index.js :

 var app = express() /* whatever configuration code */ exports.app = app // There is no need for .listen() 

Y luego maneje todas las solicitudes con la siguiente aplicación:

 var vhost = require('vhost'); express() .use(vhost('m.mysite.com', require('/path/to/m').app)) .use(vhost('sync.mysite.com', require('/path/to/sync').app)) .listen(80) 

Tenga en cuenta que /path/to/m y /path/to/sync pueden ser rutas absolutas (como se describió anteriormente) o rutas relativas.

Puede agregar un subdominio a una solicitud y luego verificarlo en las next() llamadas next() .

Obtuve el siguiente código de> http://groups.google.com/group/express-js/browse_thread/thread/b04bbaea7f0e8eed (crédito tan completo para el autor original)

 app.get('*', function(req, res, next){ if(req.headers.host == 'some.sub.domain.com') //if it's a sub-domain req.url = '/mysubdomain' + req.url; //append some text yourself next(); }); // This will mean that all get requests that come from the subdomain will get // /subdomain appended to them, so then you can have routes like this app.get('/blogposts', function(){ // for non-subdomain }); app.get('/mysubdomain/blogposts', function(){ // for subdomain }); 

Recientemente me encontré con este problema y escribí un módulo para ayudarlo con el uso de express 4. https://www.npmjs.org/package/express-subdomain .

Ejemplo – subdominio api

 var express = require('express'); var app = express(); var router = express.Router(); //api specific routes router.get('/', function(req, res) { res.send('Welcome to our API!'); }); router.get('/users', function(req, res) { res.json([ { name: "Brian" } ]); }); app.use(subdomain('api', router)); app.listen(3000); 

Consulte el módulo sobre npm para ver más ejemplos.

Creé un módulo para ayudar con los subdominios en Express: https://github.com/WilsonPage/express-subdomain-handler