2012-05-10 27 views
6

iisnodeを使用して、Windows上のIISでノードWebアプリケーションをホストしています。 Webサーバーでルートを設定すると(ExpressやRestifyなど)、IISがアプリケーションをホストしているパスとは独立した方法で行う必要があります。iisnodeでホストされているWebアプリケーションは、ホストされている仮想パスを処理できますか?

たとえば、IISを実行している2台のマシンで、2つの異なるパスでアプリケーションをホストすることができます。最初は/fooでホストし、2番目は/barにホストすることができます。私のアプリケーションが/bazにルートを設定したいとします。最初のマシンでは、ルートを/foo/bazに設定する必要があり、2番目には/bar/bazを使用する必要があります。

iisnodeでホストされているアプリケーション内からパスを確実に作成して、正しいルートを計算することは可能ですか?あるいは、そうする必要を避けるために使うことのできるもう一つのテクニックがありますか?

答えて

3

iisnodeでホストされているnode.jsアプリケーション内の仮想ディレクトリに対応するパスセグメントが表示されないようにする方法はわかりません。アプリケーションコードがホストに依存しないことを保証する最善の方法は、IIS Webサイトのルートにホストすることです。

+0

これは私の場合はできません:( – GraemeF

+0

これは残念です...すべてのパス(画像、スタイルシート、ルート、リダイレクト...)で仮想ダイレクトイを使用するのはかなり苦痛です – Alvaro

2

@GraemeF:これはちょっとハッキリですが、これは私がこの制限を乗り切った理由です。

まず、私は家と呼ばれる私のアプリにグローバル変数を追加しました:その後

var express = require('express'), 
    app = express.createServer(), 
    home = process.env.deployPath || ''; 

を、私は自宅の変数を使用して、私のルートを設定:

app.get(home + '/baz', function(req, res) { 
    res.send('This is the /baz route'); 
    res.end(); 
}); 

その後、それはの問題ですアプリのweb.configファイルにdeployPathのAppSettingを設定:

マシン1:

<appSettings> 
    <add key="deployPath" value="/foo" /> 
</appSettings> 

マシン2:

<appSettings> 
    <add key="deployPath" value="/bar" /> 
</appSettings> 

手動で、各マシン上で値を設定し、ビルドプロセスが値を設定している、あるいはターゲットマシンのグローバルweb.configファイルに設定を追加することができます。

+0

@Tomasz、プロセス環境変数をHttpRuntime.AppDomainAppVirtualPathに設定することは可能でしょうか?通常はプルリクエストを提出するだけですが、C++はまったく分かりません。 – Jason

+0

これはかなり大丈夫ですが、実際はそうではありませんトーマスがあなたの提案をそこに見られるかどうかわかりません! – GraemeF

+0

私はこの余分な設定ステップを追加することを避けたいと思っています。またgithubで問題を作成しました。 – Jason

1

This answerは、web.configファイルからのパスを取得することを示します。また

this linkにもいくつかの助けになるかもしれません:

ソリューションが良く、少なくともフレームワークはapp.use()

君を利用してアプリ「表現」のために、対処することが判明しますapp.use(app.router)を呼び出すと、仮想ディレクトリの名前空間接頭辞を渡すことができますが、その要求は成功しますが、仮想ディレクトリ名をアプリ[yuck!]にハードコードしたい人はいますか?

IISNODEがappSettingsを環境変数に昇格させるため、ソリューションは非常に簡単です。この事実を利用して、アプリケーションWebにエントリを追加することができます。以下のような設定:表現としてパスの定義を許すrestify両方

app.configure(function() { 
.... 
    app.use(process.env.appvirtdir || '', app.router); 
.... 
}); 
0

<appSettings> 
     <add key="appvirtdir" value="/nodetest" /> 
</appSettings> 

その後、あなたはこのようなあなたのserver.jsファイルへの1つの簡単な変更を行うことができます正規表現。 regexパスを使うことで、接頭辞の問題を完全に回避することができます。

代わり

server.get({ path: '/virtual/directory/structure/status/',... 

使用

server.get({ path: /.*\/status/,... 

と任意の魔法は必要ないでしょう。

関連する問題