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

时间:2016-10-31 21:39:20

标签: node.js express iis url-rewrite-module iisnode

我的网站在快递中工作。但现在我需要在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>

Source for url rewriting configuration

1 个答案:

答案 0 :(得分:0)

您需要安装应用程序请求路由here和文档here

简单地将服务器端文件放在/ server下是行不通的。 启动您的快速服务器,让我们说听http://localhost:3200/, 路线请求&#39; /&#39; to&#39; localhost:3200&#39;只会将每个请求发送到您的快速服务器。