在Express中使用vhost中间件指定按子域的路由

我正在使用vhost快速/连接中间件,我有点困惑,应该如何使用。 我想要一组路由适用于具有子域名的主机,另一组则适用于没有子域名的主机。

在我的app.js文件中,我有

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

然后在domain_routing.js

 module.exports = function(subdomain){ var app = express.createServer(); require('./routes')(app, subdomain); return app; } 

然后在routes.js我打算运行路线集,取决于是否传入的子域variables是"yes""no"

我在正确的轨道上,还是这不是你如何使用这个中间件? 我有点困惑,有两个app服务器实例被创build的事实(因为这是网上的例子似乎做的事情)。 我是否应该传递原始app服务器实例,并使用它来代替创build一个单独的子域路由器?

是的,你在正确的轨道上。 您应该为每个虚拟主机有不同的服务器实例。 是一个http.Serverexpress app

如果您通过原来的app ,您发送到虚拟主机的请求将被发送到原来的应用程序。 因此,除非虚拟主机具有在原始服务器中未使用的path,否则将得到响应,就像请求被发送到原始服务器一样。

从连接文档

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