无法使用IISNode进行express.js

时间:2013-12-06 17:11:24

标签: node.js iis express iisnode

我已经在服务器上设置了IISNode,并按照指南获取一个简单的hello world node.js应用程序。它工作正常,可通过互联网从外部访问。但是,当我尝试合并我现有的快递应用程序时,就像node / express甚至不存在一样。

这是我的web.config文件:

<configuration>
<system.webServer>

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

</system.webServer>
</configuration>

这是在IIS应用程序的根目录,以及作为我的主要快速文件的app.js。有趣的是,如果我去localhost / TestApp / app.js,我会回来:

Cannot GET /TestApp/app.js

但是,如果我尝试使用其他文件,例如localhost / TestApp / public / htm / index.htm,我会找回位于那里的文件(按照预期的HTML格式)。此外,如果我尝试进行服务器调用(例如localhost / TestApp / GetUsernames)。

更有趣的是,如果我搞砸了端口(例如app.listen(process.env.PORT2);),当我尝试访问localhost / TestApp.js时,我会得到这个:

> iisnode encountered an error when processing the request.
> 
> HRESULT: 0x2 HTTP status: 500 HTTP reason: Internal Server Error

如果端口正确(app.listen(process.env.PORT2);),我得到Can not GET /TestApp/app.js,所以它看起来像IISNode正在执行app.js(它怎么会是当我搞砸港口时失败了,但似乎没有任何工作。

我如何解决这个问题,或至少诊断问题?

谢谢。

1 个答案:

答案 0 :(得分:3)

您可能需要添加<rewrite>部分以阐明如何路由请求:

<rewrite>
        <rules>
            <!-- Don't interfere with requests for node-inspector debugging -->
            <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
                <match url="^server.js\/debug[\/]?" />
            </rule>

            <!-- First we consider whether the incoming URL matches a physical file in the /public folder -->
            <rule name="StaticContent">
                <action type="Rewrite" url="public{REQUEST_URI}" />
            </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>

从示例Azure node.js app。

中拉出