2011-04-26 25 views
48

? Estoy acostumbrado a trabajar en httpd (Apache) que proporciona una forma de configurar subdominios que están mapeados en 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¿Cómo puedo configurar múltiples subdominios en Express.js o Connect.js

¿Alguien me puede ayudar?

+0

La respuesta aceptada debe actualizarse ya que la respuesta alternativa es una solución mucho mejor a este problema. –

Respuesta

104

O, alternativamente, se podría utilizar vhost.

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

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

Y luego manejar todas las peticiones con el siguiente programa:

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 está escrito más arriba) o rutas relativas.

+0

Esto parece una forma mucho más clara y clara de lograr subdominios con expreso. – btleffler

+0

Y entonces, ¿qué debería estar en/path/to/my/path/to/sync? Otra aplicación express, como de costumbre? – Costa

+0

Sí, @Costa. Cada asignación de vhost debe apuntar a una aplicación express. – ekillaby

17

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

que tiene el siguiente código de>http://groups.google.com/group/express-js/browse_thread/thread/b04bbaea7f0e8eed (crédito tan lleno al 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 
}); 
6

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

+0

Hola, su controlador de subdominio parece interesante. ¿Cómo usaría esto con decir "dev.localhost"? ¿Qué otra cosa necesitaría cambiar además de "baseUrl: localhost"? No está muy claro en el ejemplo que publicó. Gracias. – braitsch

+0

Si lo está usando localmente, deberá asegurarse de que el subdominio que está utilizando aparezca en la lista dentro del archivo 'hosts' de su máquina. Cuando está en producción, puede configurar subdominios comodín para que no tenga que enumerar todos los subdominios que necesite. Normalmente uso el formato: subdomain.mysite.dev (localmente) y subdomain.mysite.com (en producción). – wilsonpage

10

he llegó recientemente a través de este problema, y ​​escribió un módulo para ayudar con él usando expreso 4. https://www.npmjs.org/package/express-subdomain.

Ejemplo - api del subdominio.

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 en npm para ver más ejemplos.

+2

Gran módulo, funciona muy bien. ¡Gracias! – Jon

+2

Esto parece simplemente especificar rutas para el subdominio: ¿cómo se especifican las rutas para el dominio raíz nuevamente? – fatuhoku

Cuestiones relacionadas