使用vhost中间件在Express中通过子域指定路由

时间:2012-06-29 03:13:43

标签: javascript node.js express subdomain middleware

我正在使用vhost express / connect中间件,我对它应该如何使用感到困惑。我希望有一组路由适用于具有子域的主机,另一套路由适用于没有子域的主机。

在我的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我计划运行多组路由,具体取决于传入的子域变量是"yes"还是"no"

我是在正确的轨道上还是这不是你如何使用这个中间件?我对创建了两个app服务器实例这一事实感到有点困惑(因为这就是网络上的例子似乎如何做事)。我是应该传入原来的app服务器实例而只是使用它而不是创建一个单独的服务器实例而不是子域路由器?

1 个答案:

答案 0 :(得分:2)

是的,你走在正确的轨道上。 应该为每个vhost提供不同的服务器实例。无论是http.Server还是express app

如果您传递原始app,则您发送到vhost的请求将被发送到原始应用。因此,除非vhost具有未在原始服务器中使用的路径,否则它将获得响应,就好像请求已发送到原始服务器一样。

来自连接文档

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