Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Specifying routes by subdomain in Express using vhost middleware

I'm using the vhost express/connect middleware and I'm a bit confused as to how it should be used. I want to have one set of routes apply to hosts with subdomains, and another set to apply for hosts without subdomains.

In my app.js file, I have

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);

and then in domain_routing.js:

module.exports = function(subdomain){

  var app = express.createServer();

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

  return app;
}

and then in routes.js I plan to run sets of routes, dependent on whether the subdomain variable passed in is "yes" or "no".

Am I on the right track or is this not how you use this middleware? I'm a bit confused on the fact that there are two app server instances being created (as that's how examples on the web seem to do things). Should I instead pass in the original app server instance and just use that instead of creating a separate one instead the subdomain router?

like image 978
user730569 Avatar asked Nov 04 '22 21:11

user730569


1 Answers

Yes, you are on the right track. You should have a different server instance for each of the vhost. Be it a http.Server or express app.

If you pass the original app, a request you sent to the vhost will be emitted to the original app. So, unless the vhost has paths which are not used in original server, it will get response as if the request was sent to original server.

From the connect docs

connect()
  .use(connect.vhost('foo.com', fooApp))
  .use(connect.vhost('bar.com', barApp))
  .use(connect.vhost('*.com', mainApp))
like image 61
Pavan Kumar Sunkara Avatar answered Nov 09 '22 04:11

Pavan Kumar Sunkara