2013-02-28 25 views
30

Sto utilizzando i siti Web di Windows Azure per ospitare un'applicazione node.js. Finora tutto è eccezionale tranne che per i miei errori personalizzati. Nell'app del mio nodo ho un gestore di errori che esegue il rendering di una pagina di errore personalizzata 404 e 500 personalizzata sul mio computer locale. Tuttavia, non appena pubblico in azzurro, sostituisce la risposta quando imposto lo statusCode su qualsiasi valore eccetto 200.I siti Web di Windows Azure sovrascrivono le mie pagine di errore 404 e 500 nella mia app node.js

Se non si passa il codice di stato 500 o 404 alla risposta, questo non accade, ma lo faccio vuoi i codici di stato per farlo al browser. Localmente ho la mia pagina di errore personalizzata bene:

Tuttavia, su siti web azzurre restituisce una sola riga di testo:

la pagina non può essere visualizzata a causa di un errore interno del server ha si è verificato.

Ho provato a creare il mio proprio web.config per sovrascrivere quello predefinito con errori personalizzati disabilitati ma questo non sembra avere alcun effetto. Qui è il mio web.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <customErrors mode="off" /> 
    </system.web> 
    <system.webServer> 
     <handlers> 
      <add name="iisnode" path="app.js" verb="*" modules="iisnode"/> 
     </handlers> 
     <rewrite> 
      <rules> 
       <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="app.js"/> 
       </rule> 
      </rules> 
     </rewrite> 
     <iisnode 
      debuggingEnabled="true" 
      devErrorsEnabled="true" 
      debuggerPathSegment="debug" 
      nodeProcessCommandLine="&quot;%programfiles(x86)%\nodejs\node.exe&quot;" 
      logDirectory="..\..\LogFiles\nodejs" 
      watchedFiles="*.js;iisnode.yml;node_modules\*;views\*.jade;views\*.ejb;routes\*.js" /> 
    </system.webServer> 
</configuration> 

non sono sicuro se iisnode (l'estensione per IIS che indirizza le richieste di Node.js) è responsabile per superiori mie pagine di errore o se IIS stesso è responsabile. Eventuali suggerimenti?

+1

questo non ha funzionato per me, e la ragione ha finito per essere Ho avuto un ' 'sezione nel mio web.config. Rimuovendo l'ho risolto per me: http://stackoverflow.com/questions/22549579/iis-returns-500-when-node-app-returns-a-4xx –

+0

Grazie per le informazioni @MattGreer. Hai aggiunto tu stesso l'elemento '' o è nuovo nel web.config predefinito di Azure Websites? Se fa parte del web.config predefinito, vorrei aggiornare questa risposta per riflettere la tua correzione. – Chev

+1

L'ho aggiunto io stesso per fare in modo che IIS servisse SVG (cosa che non fa per impostazione predefinita) –

risposta

81

Beh, non importa, ho trovato il problema. Se qualcun altro sta avendo lo stesso problema è sufficiente aggiungere il seguente sotto <system.webServer> nel web.config:

<httpErrors existingResponse="PassThrough" /> 
1

avuto un problema simile con il progetto MVC ospitati in Windows Azure. Sulla macchina locale ospitata su IIS funzionava bene ma sulla macchina live ricevevo il seguente errore "La risorsa che stai cercando è stata rimossa, il suo nome è cambiato o temporaneamente non disponibile."

L'aggiunta di questo al web config sotto system.webServer salvato la mia giornata

mio web.config si presenta così

<system.web> 
    *** 
    <customErrors mode="RemoteOnly" defaultRedirect="~/Error/PageNotFound"> 
     <error statusCode="404" redirect="~/Error/PageNotFound" /> 
     <error statusCode="500" redirect="~/Error/ServerError"/> 
    </customErrors> 
    </system.web> 
*** 
<system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
</system.webServer>