2016-10-31 13 views
5

Moja strona internetowa działa w trybie ekspresowym. Ale teraz muszę go hostować na IIS. Jak mogę ustawić routing do pracy z IISNode?Jak hostować usługę i statyczną zawartość w iisnode

Udało mi się przenieść moją statyczną zawartość do folderu/public (html, js z przodu itp.). Nie chciałem tego robić, ale działałem.

Przeniosłem swoją logikę po stronie serwera do/server.

Poprzednio miałem już routing w stylu .Net Web API, gdzie moje usługi były hostowane w/api. Przeniosłem je do/server/api.

Za każdym razem, gdy próbuję poprosić o mój interfejs API, otrzymuję komunikat 404. Jak mogę uzyskać to działające z IISNode?

app.use("/api", require("./api")); 

// routes/api/index.js 
var router = require('express').Router(); 
router.use('/questionsets', require('./questionsets')); 
module.exports = router; 

var router = require('express').Router(); 
router.use('/questionsets', require('./questionsets.js')); 
module.exports = router; 

// routes/api/questions.js 
var router = require('express').Router(); 

router.get('/', function (req, res) { 
    ... 
}); 

router.get('/:id', function (req, res) { 
    ... 
}); 

module.exports = router;   


<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <hiddenSegments> 
      <remove segment="bin" /> 
     </hiddenSegments> 
     </requestFiltering> 
    </security> 
    <handlers> 
     <add name="iisnode" path="bin/www" verb="*" modules="iisnode" /> 
    </handlers> 
    <iisnode loggingEnabled="false" /> 
    <httpErrors errorMode="Detailed" existingResponse="Replace"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/" responseMode="ExecuteURL" /> 
    </httpErrors> 
    <rewrite> 
     <rules> 
     <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true"> 
      <match url="iisnode" /> 
     </rule> 
     <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true"> 
      <match url="^bin\/www\/debug[\/]?" /> 
     </rule> 
     <rule name="StaticContent" patternSyntax="ECMAScript" stopProcessing="true"> 
      <match url=".*" /> 
      <action type="Rewrite" url="{C:1}" logRewrittenUrl="true" /> 
      <conditions> 
      <add input="{REQUEST_URI}" pattern=".*?\/(.*)" /> 
      </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> 
    </system.webServer> 
</configuration> 

Source for url rewriting configuration

Odpowiedz

0

Musisz zainstalować żądania aplikacji Sposób prowadzenia here, a dokumentacja here.

Po prostu umieszczenie plików po stronie serwera w katalogu/server nie będzie działać. Uruchom swój serwer ekspresowy, powiedzmy słuchaj http://localhost:3200/, Żądanie trasy '/' do 'localhost: 3200' po prostu przekieruje każde żądanie do twojego serwera ekspresowego.

+0

Nie powinienem otworzyć przeglądarki na porcie IIS - nie na porcie ekspresowym? Czy muszę uruchomić Express, czy też IIS uruchomi to za mnie? – Hoppe

+0

Właściwie musisz uruchomić oba. Express sam w sobie jest serwerem WWW, wystarczy połączyć IIS. Otwieranie IIS, oznacza, że ​​zaczyna przyjmować prośby i kieruje te żądania do wyrażenia. Musi być więc ekspres, który już działa. W takim przypadku otwórz przeglądarkę na porcie IIS (np. Http: //a.b.c: 80) i skonfiguruj usługi IIS tak, aby kierowała żądania do portu ekspresowego, na przykład "localhost: 3000". – YLS

Powiązane problemy