2014-06-08 21 views
7

Próbuję wdrożyć aplikację Node.js w usługach IIS. Widziałem próbki w repozytorium GitHub (https://github.com/tjanczuk/iisnode/tree/master/src/samples).Udostępnianie plików statycznych w usłudze IISNODE z ponownym pisaniem adresu URL StaticFiles

Utknąłem przy serwowaniu plików statycznych. Podobnie jak normalna aplikacja Node, zapisałem statyczne pliki w folderze o nazwie public. Zgodnie z sugestiami na kilku blogach/forach dodałem następującą regułę do web.config:

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

Ale to nie działa. Jeśli ktokolwiek ma przykładową aplikację demonstrującą ten problem, byłaby bardzo pomocna.

Odpowiedz

5

Wyjazd przykładowy iisnode web.config, który przekierowuje żądania plików statycznych w folderze public do statycznej obsługi plików IIS, zamiast node.js na http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html.

+0

Dzięki za odpowiedź. Jaki powinien być format ścieżki względnej, która zostanie określona podczas odwoływania się do pliku skryptu w pliku HTML po zastosowaniu przepisania? –

+0

To samo, co w przypadku, gdy plik web.config był całkowicie nieobecny i zastosowano domyślne reguły IIS (w tym nieznajomość serwera server.js jako aplikacji Node.js). Reguła zawartości statycznej nie zmienia adresu URL, po prostu zapobiega przechwytywaniu przez program obsługi iisnode. –

+0

Po prostu potwierdzenie, więc względna ścieżka statycznego pliku JavaScript to /appname/public/scripts/main.js. Popraw mnie, jeśli nigdzie się nie mylę. –

7

W przypadku ktoś natknie to pytanie w Google i miał problemy z web.config próbki wymienionego w przyjętym rozwiązaniem ...

Jest to plik web.config, który pracował dla mnie:

<?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> 

Moja struktura folderów jest:

  • ścieżka_wirtualna/- odnosi się do IIS skonfigurowanych Virtual Path
    • publicznej/- zawiera statyczny
    • Server/- zawiera pliki aplikacji serwerowych