2016-05-26 17 views
1

私が使用しているサブドメインによって異なるテンプレート設定があります。したがって私は使用しているサブドメイン名に基づいてexpress.staticを動的に設定する方法を見つけようとしています。Express.static変数に変数を設定しようとしています

app.useを実行すると、テンプレートは定義されていません。 app.useをapp.getの中で実行すると、範囲外になります。また、関数からapp.useを実行しようとすると、範囲外になります。

「テンプレート」は、私はそれが私のサブドメインおよびHTTPリクエスト

app.use('/subdomain/:domain/bower',express.static(path.join(__dirname, '/public/' + **template** + '/bower'))); 

app.get('/subdomain/:domain',function(req,res,next) {  

     get('/stores/template/' + req.params.domain) 
     .then(function(body){ 
      console.log("template: " + body.toString()); 
      template = body;     
      res.render('store',{store:req.params.domain}); 
     }); 

}); 

あるapp.getに取得変数であり、私はそれがスコープに関係しているかなり確信している、これまでのところ、私はそうではありませんそれを解決することができました。どんな助けもありがたいです

答えて

1

あなたのサーバーが最初に起動したときに、あなたの最初のapp.use()express.static()コールが実行されます。その時点で、変数templateはまだ値を持っていません。あなたは本当にあなたがそれをやろうとしているように物事を行うことはできません。

もすぐに実行されますが、そのルートに一致するHTTP要求が実際に到着したときには、将来コールバックが呼び出されることはありません。それまでに、変数templateが割り当てられると、これまでのapp.use()ステートメントでは役に立たなくなりました。

これは、サーバが設定ファイルなどから元々設定されていたときに、どのサブドメインがサービスしていたかを知ることができれば、はるかに簡単です。同じサーバーが多くのサブドメインに同時にサービスを提供し、サブドメインに基づいて異なるファイルを提供したい場合は、完全に別のコードにする必要があります。これは、express.static()あなたが本当に望んでいるのは私が知っている内蔵機能ではないサブドメイン+ルートマッチングです。

これを解決しようとすると、私の最初のミドルウェアはリクエストのサブドメインを調べてURLの先頭に挿入して、各サブドメインの一意の疑似URLを作成します。次に、ミドルウェアとルートの残りの部分がリクエストURLとして表示される疑似URLで通常のルーティングを実行できます。

関連する問題