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