我正在构建一个我正在使用nodejs express来执行rest api服务的应用程序。 我使用iisnode模块在Windows Server 2012上托管了该应用程序。一切都很完美。 问题是当我从节点应用程序返回404(未授权)消息时,端点正在接收带有iis错误页面的401 http状态。 有没有其他方法可以解决这个问题。
这是我的webconfig文件
<!-- indicates that the hello.js file is a node.js application
to be handled by the iisnode module -->
<handlers>
<add name="iisnode" path="app.js" verb="*" modules="iisnode" />
</handlers>
<!-- use URL rewriting to redirect the entire branch of the URL namespace
to hello.js node.js application; for example, the following URLs will
all be handled by hello.js:
http://localhost/node/express/myapp/foo
http://localhost/node/express/myapp/bar
-->
<rewrite>
<rules>
<rule name="/">
<match url="/*" />
<action type="Rewrite" url="app.js" />
</rule>
</rules>
</rewrite>
我在nodejs app中的代码如下
if(clienttoken!=servertoken)
{
res.json(401, 'unauthorized');
res.end();
}
提前致谢
答案 0 :(得分:2)
使用IIS,如果要将错误从Node应用程序直接返回给请求者而不使用IIS使用默认错误页面拦截错误,请使用<httpErrors>
元素并将existingResponse
属性设置为{{ 1}}
PassThrough
答案 1 :(得分:0)
IIS正在模糊&#34;详细信息&#34;错误(您的json响应)因为默认情况下错误设置为DetailedLocalOnly
,这意味着将显示来自运行网站的计算机的请求的错误详细信息,但显示该错误的通用IIS错误页面任何外部请求的代码。
将401错误设置为Detailed
应该允许您的json响应:
<configuration>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="401" />
<error statusCode="401" errorMode="Detailed"/>
</httpErrors>
</system.webServer>
</configuration>
有关详细信息,请参阅https://www.iis.net/configreference/system.webserver/httperrors。