2014-06-08 19 views
7

Sto tentando di distribuire un'applicazione Node.js su IIS. Ho visto i campioni sul repository GitHub (https://github.com/tjanczuk/iisnode/tree/master/src/samples).Elaborazione di file statici in IISNODE con StaticFiles URL Riscrivi

Sono bloccato a servire file statici. Come una normale applicazione Node, ho archiviato i file statici in una cartella denominata public. Come suggerito su diversi blog/forum ho aggiunto la seguente regola a web.config:

<rule name="StaticContent"> 
    <action type="Rewrite" url="public{REQUEST_URI}"/> 
</rule> 

Ma non funziona. Se qualcuno ha un'applicazione di esempio che dimostra questo problema, sarebbe di grande aiuto.

risposta

5

Controllare un esempio iisnode web.config che reindirizza le richieste di file statici nella cartella public al gestore file statico di IIS invece di Node.js a http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html.

+0

Grazie per la risposta. Quale dovrebbe essere il formato del percorso relativo da specificare mentre ci si riferisce al file di script in un file HTML dopo aver applicato la riscrittura? –

+0

Lo stesso se il web.config era completamente assente e venivano applicate le regole IIS predefinite (incluso il mancato riconoscimento di server.js come applicazione Node.js). La regola del contenuto statico non riscrive l'URL, ma impedisce al gestore iisnode di intercettarlo. –

+0

Solo confermando, quindi il percorso relativo di un file JavaScript statico sarebbe /appname/public/scripts/main.js. Correggimi se sbaglio dovunque. –

7

Nel caso qualcuno si imbatte in questa domanda su Google e ha avuto problemi con il web.config del campione indicato nella risposta accettata ...

Questo è il file web.config che ha funzionato per me:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer>   
     <handlers> 
      <add name="iisnode" path="server/app.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\/app.js\/debug[\/]?" /> 
       </rule> 
       <rule name="StaticContent" patternSyntax="ECMAScript" stopProcessing="true"> 
        <match url=".*" /> 
        <action type="Rewrite" url="public/{C:1}" logRewrittenUrl="true" /> 
        <conditions> 
         <add input="{REQUEST_URI}" pattern=".*?virtualpath\/(.*)" /> 
        </conditions> 
       </rule> 
        <rule name="DynamicContent" patternSyntax="ECMAScript"> 
        <match url=".*" /> 
        <conditions> 
         <add input="{{REQUEST_FILENAME}}" matchType="IsFile" negate="True" /> 
        </conditions> 
        <action type="Rewrite" url="server/app.js" logRewrittenUrl="true" /> 
       </rule> 
      </rules> 
     </rewrite> 

     <security> 
      <requestFiltering> 
       <hiddenSegments> 
        <add segment="node_modules" /> 
       </hiddenSegments> 
      </requestFiltering> 
     </security> 
    </system.webServer> 
</configuration> 

la mia struttura di cartelle è:

  • VirtualPath/- si riferisce alle IIS configurati Virtual Path
    • pubblico/- contiene contenuti statici
    • del server/- file di applicazione server contiene
Problemi correlati