我使用Windows Azure网站来托管node.js应用程序。到目前为止,一切都很好,除了我的自定义错误。在我的节点应用程序中,我有一个错误处理程序,可以在我的本地计算机上呈现自定义404和自定义500错误页面。但是,当我发布到azure时,当我将statusCode设置为除200以外的任何值时,它会覆盖响应。
如果我没有将500或404 statusCode传递给响应,那么这不会发生,但我确实希望状态代码能够进入浏览器。在本地,我得到我的自定义错误页面:
但是,在azure网站上,它只返回一行文字:
由于发生内部服务器错误,无法显示页面。
我尝试创建自己的web.config以覆盖默认的自定义错误,但似乎没有任何效果。这是我的web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<customErrors mode="off" />
</system.web>
<system.webServer>
<handlers>
<add name="iisnode" path="app.js" verb="*" modules="iisnode"/>
</handlers>
<rewrite>
<rules>
<rule name="StaticContent">
<action type="Rewrite" url="public{REQUEST_URI}"/>
</rule>
<rule name="DynamicContent">
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
</conditions>
<action type="Rewrite" url="app.js"/>
</rule>
</rules>
</rewrite>
<iisnode
debuggingEnabled="true"
devErrorsEnabled="true"
debuggerPathSegment="debug"
nodeProcessCommandLine=""%programfiles(x86)%\nodejs\node.exe""
logDirectory="..\..\LogFiles\nodejs"
watchedFiles="*.js;iisnode.yml;node_modules\*;views\*.jade;views\*.ejb;routes\*.js" />
</system.webServer>
</configuration>
我不确定iisnode
(将请求路由到node.js的iis的扩展名)负责覆盖我的错误页面或者iis本身是否负责。有什么建议吗?
答案 0 :(得分:85)
没关系,我发现了这个问题。如果其他人遇到同样的问题,只需在web.config中的<system.webServer>
下添加以下内容:
<httpErrors existingResponse="PassThrough" />
答案 1 :(得分:1)
在windows azure中托管的MVC项目存在类似问题。在IIS下托管的本地计算机上工作正常但在实时计算机上我收到以下错误&#34;您要查找的资源已被删除,名称已更改或暂时不可用。&#34;
将此添加到system.webServer下的web配置中节省了我的一天
我的web.config看起来像这样
<system.web>
***
<customErrors mode="RemoteOnly" defaultRedirect="~/Error/PageNotFound">
<error statusCode="404" redirect="~/Error/PageNotFound" />
<error statusCode="500" redirect="~/Error/ServerError"/>
</customErrors>
</system.web>
***
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>