如何在iisnode中托管服务和静态内容

Hop*_*ppe 5 iis node.js express iisnode url-rewrite-module

我的网站在快递中工作.但现在我需要在IIS上托管它.如何让我的路由与IISNode一起使用?

我能够将我的静态内容移动到/ public文件夹(html,前端js等).我不想这样做,但让那部分工作.

我将服务器端逻辑移到了/ server.

我以前有.Net Web API样式路由工作,我的服务托管在/ api.我将这些移动到/ server/api.

每当我尝试请求我的API时,我都会获得404.如何使用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>
Run Code Online (Sandbox Code Playgroud)

url重写配置的源

YLS*_*YLS 0

您需要在此处安装应用程序请求路由,并在此处安装文档。

简单地将服务器端文件放在 /server 下是行不通的。启动你的 Express 服务器,假设监听http://localhost:3200/,将请求 '/' 路由到 'localhost:3200' 只会将每个请求路由到你的 Express 服务器。