使用可变子域进行通配符路由
我想创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。