# 工作的程序員如何成為平均: Node.js
通過?[Ted Neward](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Ted+Neward)?| 2015 年 9 月

Microsoft 已作為其添加品牌名稱和"re relevancing"的一部分各軟件采用的技術 它已采用的技術之一是 Node.js。這為開發人員提供了絕佳的機會在稱為平均值 Node.js 平臺上使用更受歡迎的完整堆棧軟件分組之一: MongoDB、 Express、 AngularJS 和 Node.js。
在上一期 ([msdn.microsoft.com/magazine/mt185576](https://msdn.microsoft.com/magazine/mt185576)),我獲得了基本的 Node.js 部分啟動并運行。在這篇文章,我啟動一個簡單的節點"Hello World"Web 終結點,并將其部署到 Microsoft Azure 網站。通過下一步的幾個部分,我將緩慢生成自己的平均堆棧的方式工作的基礎知識。
如在上一篇文章中所述,有很多地方其中我可以交換出的平均堆棧部分處理其他事情 — MongoDB、 用于 Node.js 的 ASP.NET WebAPI 和 Express 或 BackboneJS 為 ASP.NET MVC (或任何其他 JavaScript 單個頁-應用程序框架的整個主機) 的 AngularJS DocumentDB — 但無替代項喜歡平均值當前持有的普及 (至少在 JavaScript 迷們之間)。
## Node.js
Node.js 是從根本上只"使用 JavaScript 在服務器上的。" 是的嘗試處理并發執行的 Node.js 到不同的編程方法。而不是調用的塊,程序員將傳遞在函數中文字在操作完成時要調用。這樣開發人員考慮將代碼作為單線程,即使多個線程都在面下方的使用也是如此。總的來說,然而,Node.js 的最大區別是您使用 JavaScript 構建的服務器組件,而不是 C#、 Java 或 Ruby。在這種意義上,它是實際上只是更改風景 — 不是完全不同的世界。
最簡單的 Node.js 應用程序,當然是無處不在"Hello,World,"它可以輕松編寫使用內置的控制臺對象:
~~~
console.log("Howdy, NodeJS!");
~~~
假設這進入名 hello.js 為當前目錄中的文件,您將使用運行該節點實用工具在命令行使用節點 hello.js。或者可以讓 Node.js 推斷的文件擴展名的只是正在運行"節點 hello"。 無論哪種方式,節點當天向您問候的傳統方法中。
與大多數編程平臺,Node.js 在初始狀態下有其自己的庫和 Api 集。正如我指出了最后一次,使用 Node.js 需要用于引用已安裝的庫的約定。將捕獲到具有相同名稱的局部變量的返回的對象。因此,例如,如果我想要編寫一個將有效地為我提供相同的問候語通過 HTTP 協議的簡單 HTTP 服務器,我可以將以下內容放到簡單 helloHTTP.js 文件:
~~~
var http = require('http');
var port = process.env.PORT || 3000;
http.createServer(function(req, res) {
? res.writeHead(200, { 'Content-Type': 'text/plain' });
? res.end('Hello World\n');
}).listen(port);
~~~
需要行查找 Node.js 安裝過程中,在"http"庫并將其存儲到依賴關系注入中的 http 對象。這是標準的 Node.js 約定,并且應保留為相當 sacrosanct。第二行使用內置的進程對象來訪問周圍的環境。在這種情況下,它使用的進程對象中的"env"對象以確定是否將一個名為端口的環境變量設置為任何內容。如果是,我將使用,作為在其上運行服務器的端口。否則,我將使用默認端口 3000。許多 Node.js 框架更喜歡作為默認情況下,端口 3000 晦澀歷史和文化的原因。
Node.js 編程的性質變得更清晰的下一步的幾行中。我使用的 http 對象以創建 HTTP 服務器。唯一的參數是原義一個函數,將請求 (HTTP 請求) 對象和 res (HTTP 響應) 對象作為參數,并使用 res 將寫回的 HTTP 響應。此習慣用法是無處不在整個 Node.js 堆棧的所有級別。
這是那些"您喜歡它或您不喜歡"的一類問題之一。您將看到的此文章來形成中的詳細信息。因此如果這不是清除,花些時間來嘗試。從 createServer 返回的對象然后綁定到使用偵聽調用所需的端口。您瞧,您有一個正在運行的 HTTP 服務器您就可以輕松地運行使用"節點 helloHTTP"和瀏覽器指向 http://localhost:3000/。
## Azure 命令行工具
從我的上一篇文章,您會記得 Node.js 有一個名為 Node 包管理器 (npm) 的可用于下載的依賴庫的包實用工具。您可以使用它來下載然后可以使用的工具從命令行。這是 Node.js 細微,但功能強大,方面。它將充當平臺無關"生存區均衡器。"
您可以有效地隱藏背后的 JavaScript 腳本墻 Windows、 Mac OS 或 Linux 任何區別。Microsoft 選取在這不久,并打包到調用 azure cli 的 Node.js 包的一組的命令行工具。將它安裝是借助 npm 輕松:
~~~
npm install –g azure-cli
~~~
-G 標志告訴 npm 以"全局"安裝的工具 (這意味著這些產品不依賴于在其中運行該命令的本地目錄)。這樣生成的包可用于整個系統內。完成后,一個新命令行實用工具,azure 之前,將可供使用。Azure cli 程序包未提供任何更高或更低的功能比使用 Azure 門戶。Azure cli 工具的優點在于它可以作為一部分的自動化的腳本 azure 命令部署系統中,例如所示。
## 將部署到 Azure
因此,如果您希望此可愛小問候供 Internet 上的世界,您需要創建 Azure 網站作為主機。使用"azure"工具,該命令相當簡單。首先,您需要將該工具綁定到在 Azure 中的帳戶:
~~~
azure account download
~~~
此操作將啟動系統的默認瀏覽器指向 Azure 登錄門戶。使用 Azure 帳戶憑據登錄。完成后,它將自動下載的 publishSettings 文件包含的憑據信息的 azure 工具需要,可以直接導入:
~~~
azure account import <filename>
~~~
文件名通常會類似于"Visual Studio Ultimate with MSDN-4-23-2015年-credentials.publishsettings,"具體取決于 Azure 訂閱詳細信息和下載的 publishSettings 文件的日期。完成后,很簡單,只需通過設置 Git 進行部署到站點創建新的 Azure 網站:
~~~
azure site create –git
~~~
這將提示輸入站點名稱和 (假定該名稱唯一的) 啟動相應的 Web 站點。如果所有的工作原理,運轉當前目錄作為 git 初始化本地存儲庫。假設您仍處于保存從之前的 helloHTTP.js 文件的同一個目錄,可以將其添加到 Git 存儲庫并將其推送到 Azure 云:
~~~
git add helloHTTP.js
git commit –m "Initial commit"
git push azure master
~~~
Git 將考慮一下幾秒鐘。然后它將經歷一系列的暫時保持不透明的步驟。在完成,不過,Azure 將保存新的 Node.js 代碼,并且您可以瀏覽到它,如中所示?圖 1。

圖 1 Hello,World 節點
這就是原因 helloHTTP 代碼將使用默認端口 3000 或從周圍的進程的環境變量端口。在 Azure 云,即會將端口設置為 Azure 基礎結構將保留一個值。這是以便 Microsoft 可以更有效地管理各種服務終結點。
這確實是您需要執行的安裝步驟的上一次。坦率地講,花費的時間以實際運行命令,一旦您已完成初始安裝階段不會超過閱讀有關它的信息。并且甚至更坦率地講,任何 Azure 工作或瀏覽需要相似類型的安裝程序。Azure 真實表示很多開發工作的下一步平臺。換而言之,這是您需要知道如何執行最終,因此您可能也了解它現在。
在這里,幾乎一切都將與平均值相關。您將需要將注意到的 Azure 詳細信息的唯一時間是當您需要配置環境以指向 MongoDB 數據庫服務器上,例如,或者在處理與 Node.js Azure 交互的方式時。
## 總結
值得指出 Node.js 不只是 HTTP 管道。事實上,節點都可以通過打開正確的庫運行任何類型的網絡應用程序。這同樣適用的 Microsoft.NET Framework。但是,如.NET Framework 中,大多數的 Node.js 應用程序會采用基于 HTTP 的本質。
在 Node.js 中的 http 庫是相當低級別。結果是,Node.js 社區開發了一個更高級別的的庫和組的抽象來簡化基于 HTTP 的終結點處理。此庫稱為速成版。它允許您構建哪些的 Node.js 社區調用"中間件。" 這就是什么我需要查看下一次。
現在,試驗 Node.js http 庫中,但不獲取太連接,因為我將會留下它非常快速一旦我進入下一次迭代。在此期間,但是...
祝您編碼愉快。
* * *
Ted Neward?*是 itrellis 一家咨詢服務公司首席技術官。他已編寫的 100 多篇文章和編寫或與他人合著過十幾本書,包括"Professional F # 2.0 》 (Wrox,2010 年)。他是 F # MVP,經常在世界各地的會議上。他定期擔任顧問和導師,如果您感興趣,請通過?[ted@tedneward.com](mailto:ted@tedneward.com)?或?[ted@itrellis.com](mailto:ted@itrellis.com)?與他聯系。*
- 介紹
- 云連接移動應用 - 借助身份驗證和離線支持構建 Xamarin 應用
- 崛起 - 自由 Internet 廣播
- Microsoft Azure - 云中的容錯問題和解決方法
- 最前沿 - 適合常見應用程序的事件源
- Azure 深入了解 - 跨云平臺創建統一的 Heroku 式工作流
- 借助 C++ 進行 Windows 開發 - Windows 運行時中的高級類型
- 編譯器優化 - 借助按本機配置優化來簡化代碼
- 數據點 - 再探 JavaScript 數據綁定(現在包含 Aurelia)
- 云安全 - 借助 Azure 密鑰保管庫保護敏感信息的安全
- 測試運行 - 借助人工尖峰神經元進行計算
- 開發運營 - 在 Microsoft 堆棧上啟用開發運營
- 孜孜不倦的程序員 - 如何成為 MEAN: Node.js
- 新型應用 - 提升新型應用的易用性的做法
- 別讓我打開話匣子 - Darwin 的照相機
- 編輯寄語 - 汽車 Internet 發生故障