私はiisnode githubプロジェクトでもこれを尋ねました
Windows Azure Web サイト経由で IISNode を使用しています。
Node アプリが 2xx ステータス コード (200、201 など) を返す場合、すべて正常であり、期待どおりに動作します。
たとえば、Node アプリが 4xx ステータス コードを返した場合
response.send(404, "not found")
(Restify を使用しています)、クライアントに 500 が送信され、本文は単純に「内部サーバー エラーが発生したため、ページを表示できません」となります。
私がそうazure site log tail <sitename>
すると、500 がクライアントに送信されると、ログに 404 の HTML が含まれます。
...
<body>
<div id="content">
<div class="content-container">
<h3>HTTP Error 404.0 - Not Found</h3>
<h4>The resource you are looking for has been removed, had its name changed,
or is temporarily unavailable.</h4>
</div>
...
IISNode/IIS に 404 を取得してクライアントに送信してもらいたいだけです。これは、401、409 などにも当てはまります。これらはすべて、代わりに 500 が送信される原因となります。
私は自分のweb.configで試し<customErrors mode="off" />
てみましたが、役に立ちませんでした。<httpErrors existingResponse="passThrough" />
ここに私のweb.configがあります:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<customErrors mode="off" />
</system.web>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
<staticContent>
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
<mimeMap fileExtension=".ico" mimeType="image/x-icon" />
</staticContent>
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
</handlers>
<rewrite>
<rules>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="server.js"/>
<match url="/*" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
価値があるのは、IISnode に何もさせることができず、ノード アプリから 200 を返すことだけです。IIS に静的ファイルを提供させたり、node-inspector を有効にしたり、より興味深い IISNode 機能を実際に実行させようとすると、500 が返されます。理由はわかりませんが、それを乗り越えたいと思っています!
同様の StackOverflow の質問
この質問はまさに私の問題です。<httpErrors existingResponse="PassThrough" />
それが私にとってはうまくいかないことを除いて。IISNode の設定にもっと根本的な問題があるように感じます。