【问题标题】:How to host a service and static content in iisnode如何在 iisnode 中托管服务和静态内容
【发布时间】:2017-03-14 01:21:58
【问题描述】:

我的网站在 express 中运行。但现在我需要将它托管在 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

【问题讨论】:

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


    【解决方案1】:

    您需要安装 Application Request Routing here 和文档 here

    简单地将服务器端文件放在 /server 下是行不通的。 启动你的快递服务器,比如说收听http://localhost:3200/, route request '/' to 'localhost:3200' 只会将每个请求路由到您的 express 服务器。

    【讨论】:

    • 我不应该将浏览器打开到 IIS 端口——而不是快速端口吗?我需要启动 Express,还是 IIS 会为我启动它?
    • 其实两者都需要启动。 Express 本身是一个 Web 服务器,只是链接 IIS。打开 IIS,意味着它开始接受请求并路由这些请求来表达。所以必须有一个快递已经在运行。在这种情况下,打开浏览器访问 IIS 端口(例如a.b.c:80),并配置 IIS 以便将请求路由到 express 端口,例如 'localhost:3000'。
    猜你喜欢
    • 2015-07-18
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2019-11-14
    相关资源
    最近更新 更多