2011-04-26 5 views
48

私は、ディレクトリにマップされているサブドメインを設定する方法を提供するhttpd(Apache)の作業に慣れています。 Connect.js/Express.jsで同じことをするにはどうしたらいいですか?私は、私が持っている唯一のことは、どのように私がサブドメインを構成するために使用できるかわからない経路だということです。私はm.mysite.com、sync.mysite.comのようなサブドメインを持っていますExpress.jsまたはConnect.jsで複数のサブドメインを設定するには

誰かが助けることができますか?

+0

代替案がこの問題を解決するためのより良い解決策であるため、受け入れられた回答を更新する必要があります。 –

答えて

104

または代わりを得ました。

次に、独自のディレクトリに複数のサイトを作成し、expressアプリをエクスポートします(例: /path/to/m/index.js:次いで

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

そして次のアプリですべての要求処理:/path/to/m/path/to/syncは、絶対パス(上記の記述されたように)、または相対パスであることができること

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) 

に注意。

+0

これは、明示的にサブドメインを達成するためのきれいで明快な方法のようです。 – btleffler

+0

そして/ path/to/mと/ path/to/syncには何が必要ですか?いつものように別の特急アプリ? – Costa

+0

はい、@Costa。それぞれの仮想マッピングは、明示的なアプリケーションを指している必要があります。 – ekillaby

17

要求にサブドメインを追加して、後でnext()呼び出しで確認することができます。

私はあなたがvhostを使用することができます(元の作者にそのフルクレジット)>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 
}); 
6

私は、Expressでサブドメインを支援するために、モジュールを作成しました:https://github.com/WilsonPage/express-subdomain-handler

+0

こんにちは、あなたのサブドメインハンドラは面白そうです。私は「dev.localhost」と言ってこれをどのように使うのでしょうか? 「baseUrl:localhost」以外に何か変更する必要があるかどうかは、投稿した例からはあまり明らかではありません。ありがとう。 – braitsch

+0

ローカルで使用している場合は、使用しているサブドメインがマシンの「hosts」ファイル内にリストされていることを確認する必要があります。本番環境では、ワイルドカードサブドメインを設定できるので、必要なすべてのサブドメインを一覧表示する必要はありません。 私は通常、サブドメイン.mysite.dev(ローカル)とサブドメイン.mysite.com(運用中)の形式を使用します。 – wilsonpage

10

私は最近、この問題に出くわした、と急行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のモジュールをご覧ください。

+2

偉大なモジュール、美しく動作します。ありがとうございました! – Jon

+2

これは、サブドメインのルートを指定するだけのようです - ルートドメインのルートをどのように指定しますか? – fatuhoku

関連する問題