express 中的路由机制默认不会把子域名考虑在内: 如:app.get(’/about’) ,会处理对应的 a.com/about , www.a.com/about , admin.a.com/about , api.a.com/about的请求。 如果想分开处理子域名,可以使用 vhost 包(表示 “虚拟主机”,源自 Apache 的机制,一般用来处理子域名)。 先安装这个包 npm i vhost --save , 然后编辑相应代码处理子域名:
// 创建子域名 “admin” ,它应该出现在所有其他路由之前
var admin = express.Router();
app.use(vhost('admin.*'), admin);
// 创建 admin 的路由,它们可以在任何地方定义
admin.get('/', function(req, res) {
res.render('admin/home')
});
admin.get('/users', function(req, res) {
res.render('admin/users')
})
express.Router() 本质上是创建了一个新的 Express 路由器实例。可以像对待原始实例(app)那样对它:像对 app 那样给它添加路由和中间件。然而将它添加到 app 上之前,它什么也不会做。我们通过 vhost 添加它,将那个路由器实例绑到那个子域名。