尝试从App Service中的子目录运行Node应用程序服务于server.js文件

时间:2017-02-24 13:26:03

标签: node.js azure express

我尝试在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处理程序之外,我还需要什么?

1 个答案:

答案 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"/>