处理请求时,iisnode遇到错误

Tuv*_*sid 13 node.js angularjs

我正在尝试使用在节点js中编写的服务器端检查angularjs应用程序,这是我在webmatrix运行时遇到的错误

处理请求时,iisnode遇到错误.

HRESULT: 0x2 
HTTP status: 500 
HTTP reason: Internal Server Error 
Run Code Online (Sandbox Code Playgroud)

您收到此HTTP 200响应,因为system.webServer/iisnode/@devErrorsEnabled配置设置为"true".

除了node.exe进程的stdout和stderr的日志之外,请考虑使用调试和ETW跟踪来进一步诊断问题.

node.exe进程尚未向stderr写入任何信息,或者iisnode无法捕获此信息.经常的原因是iisnode模块无法创建日志文件来捕获node.exe的stdout和stderr输出.请检查运行node.js应用程序的IIS应用程序池的标识是否具有对node.js应用程序所在服务器上的目录的读写访问权限.或者,您可以通过将web.config的system.webServer/iisnode/@loggingEnabled元素设置为"false"来禁用日志记录.

有人知道如何解决它吗?

小智 9

您的应用程序池似乎没有足够的权限写入当前文件夹.

  1. 您可以编辑权限以授予IIS_IUSRS组对该文件夹的写入权限

  2. 进入高级设置菜单,在Process Model - > Identity下,将用户帐户更改为已具有写权限的用户.

  • 你在说哪个文件夹? (2认同)
  • @James D 正在谈论应用程序文件夹的根目录...虚拟目录所在的位置。在IIS7中,进入您的站点-操作(右侧)-基本设置-物理路径。第一个解决方案是*正确的*解决方案。#2 有效,但只是最后的手段。 (2认同)

Has*_*kçe 6

当我尝试运行服务器时,我遇到了三个问题。我解决了这个问题:

  1. 我没有手动编写端口(例如 3000),而是添加了process.env.PORT. 它自己决定了它的端口。

  2. 授予写入日志文件夹的权限。我通过在 web.config 文件中设置 logginEnabled="false" 解决了这个问题。

  3. 删除 console.log() 命令。它将输出视为错误。

索引.js

const express = require("express");
const app = express();
var path = require("path");
const port = process.env.PORT;

app.get("/", (req, res) => {
  res.send({ appName: "animal-cdn" });
});

app.use(express.static(path.join(__dirname, "public")));
app.listen(port, () => {
  // console.log(`Example app listening at http://localhost:${port}`);
});
Run Code Online (Sandbox Code Playgroud)

web.config 文件:

<configuration>
    <system.webServer>
    
        <validation validateIntegratedModeConfiguration="false" />
        <!-- indicates that the server.js file is a node.js application 
        to be handled by the iisnode module -->
         <iisnode 
                 loggingEnabled="false"
                 debuggingEnabled="true"
              />

        <handlers>
            <add name="iisnode" path="index.js" verb="*" modules="iisnode"/>
        </handlers>
        
        <rewrite>
            <rules>
                <rule name="myapp">
                    <match url="/*" />
                    <action type="Rewrite" url="index.js" />
                </rule>
                <rule name="HTTPS Redirect" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>

    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)


bio*_*tal 5

看起来您的 iisnode 无法写入其日志文件,可能是因为它没有写入权限。如果您有权访问服务器,那么您可以在应用程序的文件夹中检查文件iisnode夹,这是 iisnode 默认尝试写入其日志的地方。

在您获得此日志信息之前,您会被卡住,因为您看到的 500 错误只会告诉您错误发生在服务器上的某处。您需要日志来为您提供继续操作所需的信息。

唯一的另一种选择是在本地运行整个过程并使用 node-inspector 之类的东西(我使用grunt-node-inspector)来调试 nodeJS 代码以查看发生了什么。