如何在Express.js或Connect.js中configuration多个子域?

我习惯于使用httpd(Apache),它提供了一种configuration映射到目录的子域的方法。 我怎么能在Connect.js / Express.js中做同样的事情? 我看到我唯一拥有的是我不确定如何使用configuration子域的路由。 我有像m.mysite.com,sync.mysite.com的子域名

有人可以帮忙吗?

或者,你也可以使用vhost

然后,在自己的目录中创build几个网站,并导出快速应用程序,例如。 /path/to/m/index.js

 var app = express() /* whatever configuration code */ exports.app = app // There is no need for .listen() 

然后用下面的应用程序处理所有请求:

 var vhost = require('vhost'); express() .use(vhost('m.mysite.com', require('/path/to/m').app)) .use(vhost('sync.mysite.com', require('/path/to/sync').app)) .listen(80) 

请注意, /path/to/m/path/to/sync可以是绝对path(如上所述)或相对path。

你可以追加一个子域到一个请求,然后在随后的next()调用中检查它。

我从http://groups.google.com/group/express-js/browse_thread/thread/b04bbaea7f0e8eed获得了以下代码(对原始作者充满信心);

 app.get('*', function(req, res, next){ if(req.headers.host == 'some.sub.domain.com') //if it's a sub-domain req.url = '/mysubdomain' + req.url; //append some text yourself next(); }); // This will mean that all get requests that come from the subdomain will get // /subdomain appended to them, so then you can have routes like this app.get('/blogposts', function(){ // for non-subdomain }); app.get('/mysubdomain/blogposts', function(){ // for subdomain }); 

我最近遇到这个问题,并写了一个模块来帮助它使用快递4. https://www.npmjs.org/package/express-subdomain

示例 – api子域。

 var express = require('express'); var app = express(); var router = express.Router(); //api specific routes router.get('/', function(req, res) { res.send('Welcome to our API!'); }); router.get('/users', function(req, res) { res.json([ { name: "Brian" } ]); }); app.use(subdomain('api', router)); app.listen(3000); 

查看npm上的模块以查看更多示例。

我创build了一个模块来帮助Express中的子域名: https : //github.com/WilsonPage/express-subdomain-handler