使用虚拟主机中间件在 Express 中按子域指定路由

Specifying routes by subdomain in Express using vhost middleware

本文关键字:路由 虚拟主机 中间件 Express      更新时间:2023-09-26

我正在使用vhost快速/连接中间件,我对如何使用它有点困惑。我希望一组路由应用于具有子域的主机,另一组路由应用于没有子域的主机。

在我的应用程序.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服务器实例并仅使用它而不是创建一个单独的实例而不是子域路由器?

是的,你走在正确的轨道上。每个虚拟主机应具有不同的服务器实例。无论是http.Server还是express app.

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

从连接文档

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