web-dev-qa-db-fra.com

Comment puis-je configurer plusieurs sous-domaines dans Express.js ou Connect.js

J'ai l'habitude de travailler sur httpd (Apache) qui fournit un moyen de configurer des sous-domaines qui sont mappés sur un répertoire. Comment puis-je faire la même chose dans Connect.js/Express.js? Je vois que la seule chose que j'ai est des routes que je ne sais pas comment utiliser pour configurer des sous-domaines. J'ai des sous-domaines comme m.mysite.com, sync.mysite.com

Quelqu'un peut-il aider?

51
Raks

Ou vous pouvez également utiliser vhost.

Ensuite, créez plusieurs sites dans leur propre répertoire et exportez l'application express, par exemple. /path/to/m/index.js:

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

Et puis gérez toutes les demandes avec l'application suivante:

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)

Notez que /path/to/m et /path/to/sync peut être des chemins absolus (comme écrit ci-dessus) ou des chemins relatifs.

115
Adrien

Vous pouvez ajouter un sous-domaine à une demande, puis le rechercher dans les appels next() suivants.

J'ai obtenu le code suivant de> http://groups.google.com/group/express-js/browse_thread/thread/b04bbaea7f0e8eed (donc crédit complet à l'auteur 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 
});
18
neebz

J'ai récemment rencontré ce problème et j'ai écrit un module pour l'aider à utiliser express 4. https://www.npmjs.org/package/express-subdomain .

Exemple - sous-domaine 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);

Consultez le module sur npm pour voir plus d'exemples.

14
bmullan91

J'ai créé un module pour aider avec les sous-domaines dans Express: https://github.com/WilsonPage/express-subdomain-handler

6
wilsonpage