2012-06-29 16 views
5

vhostエクスプレス/接続ミドルウェアを使用していますが、どのように使用すべきかについて少し混乱しています。サブドメインを持つホストには1組のルートを適用し、サブドメインを持たないホストには1セットのルートを適用したいと考えています。私app.jsファイルでvhostミドルウェアを使用してExpress内のサブドメイン別ルートを指定する

、私はdomain_routing.js

var app = express.createServer(); 

app.use...(middlware)... 
app.use(express.vhost('*.host', require('./domain_routing')("yes"))); 
app.use(express.vhost('host', require('./domain_routing')("no"))); 
app.use...(middlware)... 

app.listen(8000); 

、その後を持っている:

module.exports = function(subdomain){ 

    var app = express.createServer(); 

    require('./routes')(app, subdomain); 

    return app; 
} 

、その後routes.jsで、私はどうか、サブドメインの変数に依存して、ルートのセットを実行する予定渡されるのは"yes"または"no"です。

私は正しい軌道にいるのですか、これはこのミドルウェアの使い方ではありませんか?私は、2つのappサーバーインスタンスが作成されているという事実を少し混乱させています。代わりに元のappサーバインスタンスを渡して、サブドメインの代わりに別のルータを作成する代わりにそのインスタンスを使用するだけですか?

答えて

2

はい、あなたは正しい方向にあります。 には、仮想ホストごとに異なるサーバーインスタンスが必要です。 http.Serverまたはexpress appになります。

オリジナルのappを渡すと、仮想ホストに送信したリクエストが元のアプリに送信されます。したがって、仮想ホストに元のサーバーで使用されていないパスがない限り、要求が元のサーバーに送信されたかのように応答します。接続ドキュメントから

connect() 
    .use(connect.vhost('foo.com', fooApp)) 
    .use(connect.vhost('bar.com', barApp)) 
    .use(connect.vhost('*.com', mainApp)) 
+0

ありがとう!そして私の他の質問は、元のサーバーインスタンスに使用するミドルウェアを指定してから、別のサーバーインスタンスをvhostsに使用すると、元のサーバーに使用されていたミドルウェアが仮想ホストに引き継がれるのでしょうか?それとも、代わりに仮想マシン上でミドルウェアを排他的に使用するべきですか(元のサーバー上の仮想ホストミドルウェアを除く)基本的には、同じミドルウェアを明示的に使用する必要はなく、すべての可能な仮想ホストでミドルウェアを使用するシームレスな方法を探しています。一種の反復性のある仮想ホスト。 – user730569

+0

いいえ、すべての仮想ホストでミドルウェアを排他的に使用する必要はありません。 vhostが '.use''dになる前に、すべてのアプリケーションに使用したいミドルウェアを' .use'にすることができます –

+0

これは素晴らしいことです!しかし、好奇心から、それはどうやって働くのですか?私は、 'server.emit(" request "、req、res);というものが何の裏にあるのか少し混乱していると思います。 – user730569

関連する問題