• Node.js+Express on IIS


    就是想让node.js的程序跑在iis的意思,参考这篇文章《Hosting express node.js applications in IIS using iisnode》即可。

    开始参考的是这篇文章《Installing and Running node.js applications within IIS on Windows - Are you mad?》,其实也讲得很清楚了,只是因为太长,中间讲到

    WCAT (WEB CAPACITY ANALYSIS TOOL)去了,我还以为讲完了~~结果把网站一发布,跑不起来,发现需要手动编写web.config来加入handler,OK,原生的node程序跑起来了。结果express下的网站又没跑起来,最终解决后,串起来:

    1. 下载安装node,需要注意的是,下的64位版的node是装到64位的program files路径下的,你需要下32位版的,或者直接下一个node.exe到32位program files目录下,新建一个nodejs文件夹放进去;
    2. 下载安装iisnode,此时如此你的c:\program files(x86)\nodejs\node.exe不存在的话它就会报错退出了,这就是我第一步如此提示的原因,装完后管理员权限执行安装目录下的setupsamples.bat可立即体验下,没必要;
    3. 下载安装url rewrite包,express需要
    4. 将你的node网站发布到iis,比如:http://localhost:8081,应用程序池的.net版本任选,无意义

    发布网站后做两件事:

    1,将监听的端口改为:process.env.PORT,如在express下:app.set('port',process.env.PORT||3000);这样即能保留iis端口又能让node伺服网站的时候使用自定义的(如3000)端口;

    2,在网站根目录下添加web.config文件,加入如下内容:

    <configuration>
     <system.webServer>
    
       <!-- 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 app.js node.js application; for example, the following URLs will 
        all be handled by app.js:
        
            http://localhost/foo
            http://localhost/bar
            
        -->
     
        <rewrite>
          <rules>
            <rule name="main">
              <match url="/*" />
              <action type="Rewrite" url="app.js" />
            </rule>
          </rules>
        </rewrite>
     
        <!-- exclude node_modules directory and subdirectories from serving
        by IIS since these are implementation details of node.js applications -->
        
        <security>
          <requestFiltering>
            <hiddenSegments>
              <add segment="node_modules" />
            </hiddenSegments>
          </requestFiltering>
        </security>    
        
      </system.webServer>
    </configuration>

    这样,所有/开头的url都由app.js接管,app.js又被注册成了一个http handler,使用iisnode模块,这时候一个标准的express就可以正常跑起来了

    最后,我还用了angular,正好试一下上述url rewrite会不会把angular的url路由也接管掉,实测不会,如果用angular或其它一些框架来做SPA(单页应用)程序是没问题的,原因应该是这些框架都是用切换hash的方式来路由,github那样完全更改url的来不及测试,有时间加上测试结果

    P.S. 上面介绍安装配置过程的时候,讲到安装完iisnode后可立即体验一下的那个bat程序可以不干,其实还是建议执行一下的,它会在默认网站下生成一个node虚拟路径,里面有比较丰富的示例和说明,特别是上述web.config文件,里面还有很多可配置的地方,在configuration/readme.htm文件里面有详细的描述,建议执行和详阅。

    P.S.P.S 某次重装电脑(win8.1)后我又对着自己的文档来干这事,结果却碰到了http error 5500.19,错误代码:0x80070021,描述:This configuration section cannot be used at this path. This happens when the section is locked at a parent level. Locking is either by default (overrideModeDefault="Deny"), or set explicitly by a location tag with overrideMode="Deny" or the legacy allowOverride="false".结果发现这不是问题,我自己的iis没配置好罢了,从添加删除功能里面,把CGI勾上即可:http://stackoverflow.com/questions/9794985/iis-this-configuration-section-cannot-be-used-at-this-path-configuration-lock

  • 相关阅读:
    [每日电路图] 2、红外遥控电路原理设计与解析【转+解读】
    [每日电路图] 1、基于AT89C52单片机最小系统接口电路【转】
    [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
    [nRF51822] 4、 图解nRF51 SDK中的Schedule handling library 和Timer library
    [nRF51822] 3、 新年也来个总结——图解nRF51 SDK中的Button handling library和FIFO library
    [MFC] VS2013版本MFC工程移植到VC6.0上
    [异常解决] ubuntu上安采用sudo启动的firefox,ibus输入法失效问题解决
    [编译] 1、第一个makefile简单例子
    nginx静态文件不设置缓存
    Docker容器挂载文件(转载)
  • 原文地址:https://www.cnblogs.com/walkerwang/p/3015765.html
Copyright © 2020-2023  润新知