4

Win7ボックスでローカルにIIS 7にIISNodeをセットアップしています。サイトの指示に従いましたが、サンプルは正常に動作しています。

Express サイトの新しいシェルを実行するために、IIS マネージャーで新しい Web サイトと AppPool を作成しました。iisnode モジュールを最初の .js ファイルに関連付けるために、web.config を追加しました。

デフォルト ルート (/) を参照すると、Http 403.14 エラーが発生します (サーバーは、ディレクトリの内容を一覧表示しないように構成されています)。

IISNode サンプル ディレクトリを Express アプリのある場所に再マップしようとしましたが、同じエラーが発生します。

存在しないルートに行こうとすると、Connect の 404 エラー メッセージが表示されますCannot VERB ROUTE

シンプルで(できれば明らかな)何かが欠けているように感じます。

誰かがこれに遭遇し、私にいくつかの洞察を提供できますか? オンラインで調べても、いつ確認できるかについてはほとんど光がありません。

4

3 に答える 3

7

私は自分が抱えている問題を理解しました。app.jsweb.configには、iisnodeモジュールをファイルにマップするためのデフォルトのIISNodeセクションとハンドラーセクションがありました。

ただし、Expressを使用する場合、すべてのルートはそのファイルを経由する必要があります。したがって、以下のように書き換えセクションを追加することで、私の問題は解決しました。

<rewrite>
  <rules>
    <rule name="Catch All">
      <match url="/*" />
      <action type="Rewrite" url="app.js" />
    </rule>
  </rules>
</rewrite>
于 2012-09-11T19:22:33.833 に答える
3

より高度な URL 書き換え構成については、http: //tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html で web.config テンプレートを確認してください。このテンプレートを使用すると、静的コンテンツの要求を IIS 静的ファイル ハンドラーにリダイレクトしたり、HTTP 経由で iisnode ログへのアクセスを保持したりできます。

    <?xml version="1.0" encoding="utf-8"?>  
<configuration>  
    <system.webServer>           
      <handlers>  
           <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>  
     </handlers>  
      <rewrite>  
           <rules>  
                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">  
                     <match url="iisnode"/>  
                </rule>  
                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                      
                    <match url="^server.js\/debug[\/]?" />  
                </rule>  
                <rule name="StaticContent">  
                     <action type="Rewrite" url="public{{REQUEST_URI}}"/>  
                </rule>  
                <rule name="DynamicContent">  
                     <conditions>  
                          <add input="{{REQUEST_FILENAME}}" matchType="IsFile" negate="True"/>  
                     </conditions>  
                     <action type="Rewrite" url="server.js"/>  
                </rule>  
           </rules>  
      </rewrite>  
   </system.webServer>  
 </configuration>

上記の web.config には次の効果があります。

  1. node.js アプリケーションへのエントリ ポイントとして server.js を指定します。
  2. 「パブリック」サブディレクトリ内の物理ファイルにマップされる URL に対するすべての要求を、IIS 静的ファイル ハンドラーにリダイレクトします。IIS 静的ファイル ハンドラーを使用すると、node.js アプリケーション内から静的コンテンツを提供する場合と比較して、パフォーマンスが大幅に向上します。ハンドラーは、優れたパフォーマンスを提供する IIS および OS の低レベル キャッシュ メカニズムを活用します。
  3. これにより、IIS は node.js アプリケーションの出力をキャプチャするログ ファイルを静的ファイルとして提供できるようになり、HTTP 経由でアクセスできるようになります。デフォルトでは、server.js エントリ ポイントがhttp://example.com/server.jsにある場合、ログ ファイルにはhttp://example.com/iisnodeでアクセスできます。
  4. http://example.com/server.js/debugで組み込みの node-inspector デバッガーを公開します。iisnode を使用したデバッグの詳細を確認してください。
  5. server.js で node.js アプリケーションによって処理される他のすべての HTTP 要求を送信します。
于 2012-09-11T23:35:33.737 に答える