使用 Express 的基本 Hello World 示例

要使此示例正常工作,你需要在 IIS 主机上创建 IIS 7/8 应用程序,并将包含 Node.js Web App 的目录添加为物理目录。确保你的应用程序/应用程序池标识可以访问 Node.js 安装。此示例使用 Node.js 64 位安装。

项目结构

这是 IISNode / Node.js Web 应用程序的基本项目结构。除了添加 Web.config 之外,它看起来几乎与任何非 IISNode Web App 相同。

- /app_root
  - package.json
  - server.js
  - Web.config

server.js - Express Application

const express = require('express');
const server = express();

// We need to get the port that IISNode passes into us 
// using the PORT environment variable, if it isn't set use a default value
const port = process.env.PORT || 3000;

// Setup a route at the index of our app    
server.get('/', (req, res) => {
    return res.status(200).send('Hello World');
});

server.listen(port, () => {
    console.log(`Listening on ${port}`);
});

配置和 Web.config

Web.config 就像任何其他 IIS Web.config 一样,除了必须存在以下两件事,URL <rewrite><rules> 和 IISNode <handler>。这两个元素都是 <system.webServer> 元素的子元素。

组态

你可以使用 iisnode.yml 文件或在 Web.config添加 <iisnode>元素作为 <system.webServer>的子项来配置 IISNode。这两种配置都可以相互结合使用,但是在这种情况下,Web.config 需要指定 iisnode.yml 文件**,而且**任何配置冲突都将取自 iisnode.yml 文件 。这种配置覆盖不能以相反的方式发生。

IISNode 处理程序

为了让 IIS 知道 server.js 包含我们的 Node.js Web App,我们需要明确告诉它。我们可以通过将 IISNode <handler> 添加到 <handlers> 元素来实现。

<handlers>
  <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
</handlers>

URL 重写规则

配置的最后一部分是确保进入我们的 IIS 实例的 Node.js 应用程序的流量被定向到 IISNode。如果没有 URL 重写规则,我们需要访问 http://<host>/server.js 访问我们的应用程序,更糟糕的是,当尝试请求 server.js 提供的资源时,你将获得一个知识。这就是 IISNode Web 应用程序需要 URL 重写的原因。

<rewrite>
    <rules>
        <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
        <rule name="StaticContent" patternSyntax="Wildcard">
            <action type="Rewrite" url="public/{R:0}" logRewrittenUrl="true"/>
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            </conditions>
            <match url="*.*"/>
        </rule>

        <!-- All other URLs are mapped to the Node.js application entry point -->
        <rule name="DynamicContent">
            <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
            </conditions>
            <action type="Rewrite" url="server.js"/>
        </rule>
    </rules>
</rewrite>

这是一个适用于此示例的 Web.config 文件 ,设置为 64 位 Node.js 安装。

就是这样,现在访问你的 IIS 站点并看到你的 Node.js 应用程序正常工作。