这几篇文章是一个系列的:
- 用issnode+IIS来托管NodeJs Server之一:安装篇
- 用issnode+IIS来托管NodeJs Server之二:移植
- 用issnode+IIS来托管NodeJs Server之三:加入Windows集成验证功能
- 用issnode+IIS来托管NodeJs Server之四:支持Debug
本来以为iisnode的集成已经很完美了,今天突然想使用下iisnode的调试与日志,所以就作了一些研究,发现真的很不错!我的设置,基本上是参照这篇文章的:http://tomasz.janczuk.org/2011/11/debug-nodejs-applications-on-windows.html。
第一,iisnode本身就支持debug模式,使用Chrome访问 http://localhost/app.js/debug,这个URL就进入了debug模式了,可以设置断点,可以单步调试。
第二,但是对于expressJs框架的程序来说,因为URL被重写了,所以简单的使用/debug这个URL是无效的。怎么办呢?也比较简单,在web.config里面写一句话就行了:
<rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^app.js/debug[/]?" /> </rule>
这个意思是说,假如URL匹配 /app.js/debug,那么就不要进行URL重写。我再配置过程中,发现了一些问题,就是浏览器有记忆功能,所以每当你修改了web.config,最好是重启一下IIS服务器、重启一下浏览器,再按Ctrl+F5清一下缓存,在测试。
第三,因为服务器进入了debug状态就不会自己退出,所以需要显式访问 /debug/?kill来退出调试状态。
最后贴一下我的配置文件。为了安全起见,我把/debug改成了/debug_private,这样比较安全:
<configuration> <system.webServer> <handlers> <add name="iisnode" path="app.js" verb="*" modules="iisnode" /> </handlers> <rewrite> <rules> <clear /> <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true"> <match url="^app.js/debug_private[/]?" /> </rule> <rule name="mysite" enabled="true"> <match url="/*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> <action type="Rewrite" url="app.js" /> </rule> </rules> </rewrite> <defaultDocument> <files> <add value="app.js" /> </files> </defaultDocument> <iisnode promoteServerVars="AUTH_USER,AUTH_TYPE" debuggerPortRange="5058-6058" debuggerPathSegment="debug_private" maxNamedPipeConnectionRetry="3" namedPipeConnectionRetryDelay="2000" /> </system.webServer> <system.web> <identity impersonate="false" /> </system.web> </configuration>