# 工作的程序員如何成為平均: 快速安裝
通過?[Ted Neward](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Ted+Neward)?| 2015 年 10 月
MongoDB、 Express、 AngularJS,Node.js (平均值) 堆棧是一種替代方法"Web 堆棧"(有人說互為補充其他人的意見增補) 到 ASP.NET 棧的.NET 開發人員都習慣。本期內容中將標記中我將在其中介紹處理 HTTP 處理在服務器上的 Express 庫的一系列的第三。
在上一期 ([msdn.microsoft.com/magazine/mt422588](https://msdn.microsoft.com/magazine/mt422588)),我介紹了如何將 Node.js 應用程序安裝到 Microsoft Azure。由于執行此操作是實質上是只需提交到 Git 存儲庫 (,然后將這些提交推送到 Azure 的遠程存儲庫),我將這些擴展在此和將來的專欄,至少直到我開始在 Azure 平臺上的其他服務 (如 MongoDB) 通話。或者,可以運行在本地計算機上的所有示例以追蹤它。Azure 肯定不是必需 (至少會在我開始討論將推送到生產環境)。
## 獲取有關速成版
所有訓練雙關語放在一邊,Express 是一個非常簡單的庫。很容易地使用,一旦您接受"Node.js 方式。" 只是為了保持認知負載方面 light,我將首先從零開始 (相對而言)。我假設您有一個全新的 Azure 站點 (的成功結果"azure 站點創建--git"命令) 和簡單的 Express 應用程序啟動并運行。
在第一期專欄中 ([msdn.microsoft.com/magazine/mt185576](https://msdn.microsoft.com/magazine/mt185576)),如我提到的 npm,Node 包管理器。這是所有的 Node 應用程序的庫和依賴關系管理器。它相當于 NuGet 在 Microsoft.NET Framework 環境中所扮演的角色。實際上,這兩了靈感就來源于 Ruby gem,以便它們共享許多相同的特征。
事實證明,為其所有的信息,npm 取決于包含所有依賴項的 JSON 文件 — — 生產和僅用于開發包 — 在單個文件調用 package.json 上。因此邏輯的第一步是創建該文件與 Express 作為一個依賴項中所示?圖 1。
圖 1 創建一個文件作為一個依賴項速成版
~~~
{
? "name": "MSDN-MEAN",
? "version": "0.0.1",
? "description": "Testing out building a MEAN app from scratch",
? "main": "app.js",
? "scripts": {},
? "author": "Ted Neward",
? "license": "ISC",
? "dependencies": {
??? "express": "^4.9.8",
??? "lodash": "^2.4.1",
??? "serve-static": "^1.7.0"
? },
? "devDependencies": {
? }
}
~~~
此文件的內容通常都很容易理解,但有幾點值得說明一下。首先,您通常會 (盡管有一些工具可為你管理) 來對此文件手動維護。這就是為了與 Node.js world"文本編輯器和命令行"理念保持一致。因此,準節點開發人員應熟悉編輯手工,而不考慮任何工具的可用性。其次,有兩個集的依賴關系。依賴關系是 npm 應在生產類型環境中安裝的程序包。DevDependencies 是僅由開發人員使用的程序包。
現在,思考一下這個最簡單方法是在應用程序 (通過 Git) 推送到 Azure 時將安裝依賴項。當 devDependencies 安裝 (以及依賴關系的內容) 中所示在開發人員便攜式計算機上安裝包?圖 2

圖 2 安裝您的依賴關系
說到這里,您應該現在開始吧。與只是當前目錄中的 package.json 文件,輸入"npm 安裝"命令行和監視 npm 請求在沿 express,但 lodash (函數和方法,包括使用某些功能的工具如地圖和篩選器,以及對數組和對象的擴展的一個方便的庫),向下和 serve 靜態 (稍后我將討論更高版本) 到您的本地計算機上。
NuGet,如不只是該程序包,但所有依賴項,也會安裝 npm。這是什么導致終端中的樹中顯示。對于大傘合并大量的熱門程序包的程序包,此顯示可以獲得相當長。Npm 還工具我在我 package.json 中省去了兩個條目的說明: 此包的來自該存儲庫字段和自述文件數據。這些主要用于 npm 包安裝到中央 npm 庫。我找不到他們尤其適合于在應用程序中,但肯定您的喜好而定警告小于 npm 活動讓它們不會帶來危害。
隨著這一系列的不斷,我將添加到 package.json,因此您應定期運行"npm install"的其他包以獲取新的包。事實上,請注意,在速成版安裝輸出目錄樹調試包 (其中我使用在上一期的),則一個依賴項,但我沒有將它放到 package.json 文件直接。它已被我 package.json 文件應逐一顯式列出所有依賴項直接 (而不是所使用的庫,但永遠不會直接調用),我使用我習慣、 讓繼續并將其添加到 package.json 并執行另一個"npm 安裝":
~~~
"dependencies": {
? "debug": "^2.2.0",
? "express": "^4.9.8",
? "lodash": "^2.4.1",
? "serve-static": "^1.7.0"
},
~~~
這種方式在種情況下我知道哪個版本的調試我實際使用而非 Express 使用何種版本),這種差異變得重要。順便說一下,(既然您知道的文件格式如下所示) 安裝庫的傳統方法是使用"npm 安裝 -另存使用。" 使用"-將保存"參數將導致 npm 修改 package.json 文件 (而不是只需將其安裝沒有記錄的情況下)。
事實上,如果這樣做"npm 安裝保存、 express-"npm 將更新的 express 條目為最新版本 (即,在撰寫本文時,4.13.3),即使它已存在。沒有但第三種方法中,使用另一個包稱作 yeoman 搭建出的 Express 應用程序中,但這里的目標的一部分是我要將此留給更高版本以便了解平均值、 中的所有移動部分。
## 大家好,Express
一旦安裝 Express bits,很簡單,只需編寫無處不在 Express 中的"hello world"。(因為這是與它為"main"的條目具有何種 package.json) 調用 app.js 文件中,在代碼?圖 3?簡單但有必要敬意向計算機科學領域神靈。
圖 3 Hello World 速成版的代碼
~~~
// Load modules
var express = require('express');
var debug = require('debug')('app');
// Create express instance
var app = express();
// Set up a simple route
app.get('/', function (req, res) {
? debug("/ requested");
? res.send('Hello World!');
});
// Start the server
var port = process.env.PORT || 3000;
debug("We picked up",port,"for the port");
var server = app.listen(port, function () {
? var host = server.address().address;
? var port = server.address().port;
? console.log('Example app listening at http://%s:%s', host, port);
});
~~~
前兩行是您在上一期,這是目前 Node.js 如何加載模塊中看到的需要調用。這將更改 ECMAScript 6 中后,已批準并發貨。這些為您提供訪問 express 并調試包,分別。Express 模塊通過提取需要是實際的函數,在調用時,會產生速成版應用程序本身 — 因此,它將進入應用程序 (按約定)。
下一行是 Express 所調用的路由。這后期是在許多方面與在 ASP.NET 和 ASP.NET MVC 中更常見的路由表類似。這將映射請求謂詞 (get) 的相對 URL 路徑 ("/"在此情況下) 的函數。在這種情況下,它是一個匿名函數文字響應與"Hello World"。 請注意該函數也使用 debug 對象來收到請求后 spew 出快速的行。
最后,代碼將檢查當前環境以查看是否有一個端口的環境變量指定 (這將是在 Azure 中)。如果沒有,它分配到端口 3000。然后應用程序對象被告知要聽到聲音,這是阻止調用。它將執行時它開始偵聽傳入的匿名函數文字。然后該過程將只是等待傳入的請求。假定該請求是為"/,"回復與"Hello World"。
## 調試、 Express 和您
如前一部分中所述,調試輸出不會顯示除非調試環境變量設置為在需要步驟中使用相同的字符串。在這種情況下,這是應用程序。Express 還使用調試和如果調試設置為"*,"則所有速成版的診斷輸出還將顯示。很可能有點太讓人望而卻步用于調試定期進行,但它可以是很有幫助才能看到它在早期階段使用速成版的滾動。這將有助于為您提供某種意義上的各個部分,而且什么正在時調用。沒有舉例說明如何 (使用了幾個請求) 中所示其輸出?圖 4。

圖 4 Express with 調試日志記錄
若要關閉調試功能,只需設置為 nothing 的調試。若要查看多個調試流,而不是所有這些只是逗號單獨名稱:
~~~
DEBUG=app,express:router,express:router:layer
~~~
該命令將只顯示來自這些三個調試流的輸出。
## 總結
在許多方面,速成版很像 ASP.NET。這是 true 不僅在它如何處理 HTTP 通信,但它作為一種"中央中心"圍繞其數十個 (如果不數百) 的其他程序包依賴于和擴展。"Serve static"包中,例如,為的 Express 應用程序提供預建的方法來提供靜態的 (即,"不執行在服務器端") 的資產如圖像和字體的目錄。在下一部分中,我將首先著眼于如何使用 Express 請求和響應對象。(如果您等不及,簽出的速成版文檔[expressjs.com](http://expressjs.com/)。) 同時...祝您編碼愉快 !
* * *
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)?與他聯系。*
- 介紹
- Microsoft Azure - Microsoft Azure - 大圖
- 崛起 - 新手成功的秘訣
- ASP.NET - 借助 OmniSharp 和 Yeoman 隨時隨地使用 ASP.NET 5
- 使用 C++ 進行 Windows 開發 - Visual C++ 2015 中的協同例程
- Visual Studio - Bower: 用于 Web 開發的新型工具
- 測試運行 - 使用 C# 實現線性判別分析
- 代碼分析 - 借助與 NuGet 集成的 Roslyn 代碼分析來生成和部署庫
- 孜孜不倦的程序員 - 如何成為 MEAN: 快速安裝
- Microsoft Band - 借助 Microsoft Band SDK 開發 Windows 10 應用程序
- C# - C# 中的一種分裂與合并表達式分析器
- 別讓我打開話匣子 - 過時的東西
- 編者寄語 - 災難鏈