我尝试在Azure App Service的子目录中运行Node应用程序时遇到一个奇怪的问题。
我的目录结构是:
|common
-- common_model.js
|client
-- angular 2 app js files
|server
-- server.js with other express app files
|web.config
我已将web.config文件配置为将所有请求指向server \ server.js文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<webSocket enabled="false" />
<handlers>
<add name="iisnode" path="server\server.js" verb="*" modules="iisnode"/>
</handlers>
<rewrite>
<rules>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="server\server.js"/>
</rule>
</rules>
</rewrite>
<security>
<requestFiltering>
<hiddenSegments>
<remove segment="bin"/>
<add segment="node_modules" />
</hiddenSegments>
</requestFiltering>
</security>
<httpErrors existingResponse="PassThrough" />
<iisnode watchedFiles="web.config;*.js"/>
</system.webServer>
</configuration>
在浏览器中加载站点时,将返回server.js的内容并且不会执行。除了配置为运行此命令的iisnode处理程序之外,我还需要什么?
答案 0 :(得分:1)
尽管设定了路径:
<add name="iisnode" path="server\server.js" verb="*" modules="iisnode"/>
iisnode模块似乎只能在root中使用server.js文件。解决方案很幸运,只需在根目录中创建一个仅包含子目录文件的server.js文件。整个文件是一行:
require("./server/server.js");
然后您可以使用默认的iisnode处理程序:
<add name="iisnode" path="server.js" verb="*" modules="iisnode"/>