﻿# 如何在Windows作業系統安裝 Node.js 執行環境 (WebMatrix)

昨天本來很想去參加[HTML5與Node.js在台灣聯合技術小聚](http://www.facebook.com/event.php?eid=108571625914197)，礙於有要事在身無法參加實在可惜，最近剛好看到 [Tomasz Janczuk](http://tomasz.janczuk.org/) 開發出 [iisnode](https://github.com/tjanczuk/iisnode) 專案，一整個超強的，可以用非常直覺的方式在 Windows 平台與 IIS 來管理 [node.js](http://nodejs.org/) 應用程式，還能用 [WebMatrix](http://www.asp.net/webmatrix) 進一步整合開發環境，所以特別撰文告知 [node.js](http://nodejs.org/) 迷這個好消息。 :-)

本篇文章我就不介紹太多關於 node.js 的基本介紹了，有興趣瞭解的人可以參考以下網址：

-   [node.js](http://nodejs.org/)
-   [What is Node.js?](http://radar.oreilly.com/2011/07/what-is-node.html)
-   [2011 網頁開發熱門技術 – Node.js](http://www.inside.com.tw/2011/03/13/new-tech-nodejs)

要在 Windows 安裝 node.js 已經不像以前要先安裝 Cygwin 才能用，現在已經有 **Windows 原生版**的 [node.js](http://nodejs.org/) 可用，甚至於還有原始碼可下載自行透過 VC++ 來[編譯](https://github.com/joyent/node/wiki/Installation)。

不過這都不是我今天想講的重點，今天的重點在於用最懶惰的方式透過 [WebMatrix](http://www.asp.net/webmatrix) 安裝、設定與執行 node.js 應用程式，步驟有多簡單絕對超乎你的想像！ ^\_^

步驟一：[使用 Web PI 安裝 WebMatrix](/post/2011/06/10/WebMatrix-Quick-Start-Part-1-Installation-using-Web-Platform-Installer.aspx) ( 請參考文章說明進行安裝 )

步驟二：安裝 [iisnode for iis 7.x](https://github.com/tjanczuk/iisnode)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b701d03c87b3881c26c3-image_1103.png)

此步驟安裝好之後會有兩個安裝目錄存放檔案：

1.  **iisnode 主程式與範例程式：**%LOCALAPPDATA%\\iisnode
2.  **node.js for Windows：**C:\\Program Files (x86)\\nodejs

步驟三：安裝 [node.js templates for WebMatrix](https://github.com/SteveSanderson/Node.js-Site-Templates-for-WebMatrix)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/788d8b3d7c77007e3d0d-image_1104.png)

安裝完成！

什麼？只有三個步驟？ Yes!

以下我們來看看怎樣架設基本的 node.js 開發環境有哪些步驟：

步驟一：開啟 [WebMatrix](http://www.asp.net/webmatrix)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0713a72ed0cb51708dec-image_1105.png)

步驟二：選擇「依據範本的站台」

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b07f3774862fb4a045a0-image_1106.png)

3\. 選取站台範本，在這裡會有兩個跟 Node.js 相關的範本

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9aa9a366bd920699e823-image_1107.png)

**Empty Node.js Site**

此站台範本就是一個很基本的 Hello World 範例，讓你從頭打造 node.js 應用程式！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a07109d0d4bebdd615bd-SNAGHTMLc00469f.png)

**Node.js Express Site**

此站台範本包含了 node.js 的 express module，有個基本的網站開發架構，可以讓你用 MVC 架構來開發 node.js 網站應用程式！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0071b9e1cfcb39b431af-image_1108.png)

步驟三：執行 node.js 網站

在 [WebMatrix](http://www.asp.net/webmatrix) 開發工具裡直接按下「執行」按鈕，node.js 網站就跑起來了，如下圖示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/353e700f70a51af80028-SNAGHTMLc02ae76.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d82f9e7abad17604654f-image_1109.png)

開發環境設定完成！

什麼？只有三個步驟？ Yes! 今後你只要直接在 [WebMatrix](http://www.asp.net/webmatrix) 修改 node.js 的程式碼，然後立即按下「執行」按鈕（或按下 F12 功能鍵），就可以立即看到程式修改後的結果！

**其他補充說明**

1\. 使用 iisnode 執行效能較差，但真的很方便做開發測試。  
（相較於 Windows 原生的 node.exe 來執行網站，我實測 [RPS](http://en.wikipedia.org/wiki/Requests_per_second#Load_limits) 大約差 15 倍之多）

2\. 比起直接使用 node.exe 來執行程式，使用 iisnode 還有以下優點：

-   程序管理：由 IIS / IIS Express 幫你管理 node.exe 的執行生命週期，省去管理的麻煩。  
    （效能問題日後隨著時間演進一定能解決）
-   延展性高：因為 node.exe 一個程序只會用到一個執行緒，所以只能用到一個 CPU 核心的運算能力，像我自己在我的四核心 CPU 的桌機用 ab 做壓力測試時，一個 node.exe 只能用到四分之一的運算資源而已，不過即便如此，我測得的 RPS 竟然還有 7402.03 #/sec 之多！  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c2e6dc50238cad4d0f84-SNAGHTMLc14d103.png)
-   自動更新：使用原生的 node.exe 無法偵測你的 js 應用程式有異動，透過 iisnode 會自動管理 node.exe 的生命週期，當程式有異動時會先消化完尚未處理的要求後自動回收正在執行的 node.exe 程序，並重新啟動一個新的 node.exe 接收新的要求。
-   透過 HTTP 存取偵錯紀錄：撰寫 node.js 時可能會利用 console.log() 方法來寫一些執行時期的紀錄檔，透過 iisnode 可以直接透過 HTTP 存取這些記錄資訊，對於遠端執行的 node.js 應用程式來說非常方便。
-   要搬移現有的 node.js 的程式碼到 iisnode 不需修改太多程式碼，頂多只會需要修改 Listen 的 Port 而已，透過 WebMatrix 管理的話 Port 是透過如下圖的方式管理的：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d8a313fbfb1f8da81cbf-image_1110.png)
-   與 IIS 完美結合，連設定 node.js 的執行環境都可以透過 web.config 定義，例如：

```xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="iisnode" path="hello.js" verb="*" modules="iisnode" />
    </handlers>
    <iisnode
      nodeProcessCommandLine="%systemdrive%\node\node.exe"
      maxProcessCountPerApplication="4"
      maxConcurrentRequestsPerProcess="1024"
      maxPendingRequestsPerApplication="1024"
      maxNamedPipeConnectionRetry="3"
      namedPipeConnectionRetryDelay="2000"
      asyncCompletionThreadCount="4"
      initialRequestBufferSize="4096"
      maxRequestBufferSize="65536"
      uncFileChangesPollingInterval="5000"
      gracefulShutdownTimeout="60000"
      loggingEnabled="true"
      logDirectoryNameSuffix="logs"
      maxLogFileSizeInKB="128"
      appendToExistingLog="false"
     />
  </system.webServer>
</configuration>
```

-   iisnode for iisexpress 安裝好之後有包含幾個範例程式位於 %LOCALAPPDATA%\\iisnode\\www，你可以利用 WebMatrix 開啟該目錄，即可執行這些範例 node.js 程式：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/427327bab3d38c9ee7ee-image_1111.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d6e5e8fc9fe836a5af81-SNAGHTMLc9078aa.png)

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/529b65f2768f3ff76d8f-image_1112.png)  
  
![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/da1932bab833ef6b58b8-SNAGHTMLc914aa8.png)

**相關連結**

-   [node.js](http://nodejs.org/)
-   [tjanczuk/iisnode – GitHub](https://github.com/tjanczuk/iisnode)
-   [SteveSanderson/Node.js-Site-Templates-for-WebMatrix - GitHub](https://github.com/SteveSanderson/Node.js-Site-Templates-for-WebMatrix)
-   [Tomek on Software](http://tomasz.janczuk.org/) ( Tomasz's blog )

-   [Getting started with node.js on Windows](http://tomasz.janczuk.org/2011/09/getting-started-with-nodejs-on-windows.html)
-   [Developing node.js applications in WebMatrix and testing in IIS Express on Windows](http://tomasz.janczuk.org/2011/08/developing-nodejs-applications-in.html)
-   [Hosting node.js applications in IIS on Windows](http://tomasz.janczuk.org/2011/08/hosting-nodejs-applications-in-iis-on.html)

-   [WebMatrix: The Official Microsoft ASP.NET Site](http://www.asp.net/webmatrix)
-   [Installing and Running node.js applications within IIS on Windows - Are you mad?](http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx)
-   [WebMatrix and node.js: The easiest way to get started with node on Windows](http://www.hanselman.com/blog/WebMatrixAndNodejsTheEasiestWayToGetStartedWithNodeOnWindows.aspx)
-   臉書社團 - [node.js 台灣](http://www.facebook.com/groups/node.js.tw/)
-   粉絲專頁 - [NodeJS Taiwan](http://www.facebook.com/NodeJS.tw)
-   粉絲專頁 - [Node.js](http://www.facebook.com/pages/Nodejs/224740007578918)
