我已经在服务器上设置了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(它怎么会是当我搞砸港口时失败了,但似乎没有任何工作。
我如何解决这个问题,或至少诊断问题?
谢谢。
答案 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。
中拉出