使用可变子域进行通配符路由

我想创build一个使用dynamic/可变子域进行路由的快速应用程序。 这是我想要做的:

  • http://<username>.mysite.dev应将请求转发给users/index.js

users/index.js我将通过req.subdomain[0]访问用户名。 如果我也可以在<username>上运行正则expression式检查,那将会很好。

我的第一个方法:

我正在使用节点包express-subdomain路由请求:

 /* import node packages */ var express = require('express'), subdomain = require('express-subdomain'); /* application config */ var app = express(), port = process.env.PORT || 3000; /* import all apps */ var users = require('./users/index.js'); /* route requests by subdomain */ app.use(subdomain('*', users)); app.get('/', function(req,res) { /* Never get here */ res.send('Homepage'); }); /* run app on given port */ app.listen(3000, function() { console.log('Listening on port ' + port + ' ...'); }); 

这种方法的问题是*无法正常工作。 即使没有子域( http://mysite.dev ),它也会将所有请求转发给我的users/index.js 。 这个问题的一个解决scheme是,如果我改变这样的路由:

 app.use(subdomain('*.users', users)); 

所以我可以通过http://<user>.users.mysite.dev访问users/index.js ,当没有子域时,我也可以访问正常的站点。 但是这种方法并不是我想要的 – users子域太多了。 另外我不能使用正则expression式。

现在,我正在为这个问题寻找更好的解决scheme。