2015 年 10 月

第 30 卷,第 10 期

本文章是由機器翻譯。

工作的程式師如何成為平均: Express 安裝

Ted Neward |2015 年 10 月

MongoDB、 Express、 AngularJS,Node.js (平均) 堆疊是 「 Web 堆疊 」 的替代方式 (有人說互補,其他人說補充) 的.net 開發人員都習慣的 ASP.NET 堆疊。這一期會標示第三個數列中這我稍後會處理 HTTP 處理在伺服器上的 Express 文件庫中。

在上一篇文章中 (msdn.microsoft.com/magazine/mt422588),我示範了如何將 Node.js 應用程式安裝到 Microsoft Azure。因為這樣基本上是只認可至 Git 儲存機制 (以及然後將這些認可推送至 Azure 的遠端儲存機制),我要把這些在這個向外和未來的資料行至少直到我開始在 Azure 平台上 (例如 MongoDB) 的其他服務進行交談。或者,您可以在本機電腦上執行的所有範例以沿用。Azure 當然就不需要 (至少等到我開始談論推入到實際執行環境)。

快速取得

所有的訓練擱置在一旁 puns、 Express 是一個相當簡單的程式庫。很容易使用,一旦採行 「 Node.js 方法。 」 只是為了讓認知負載輕,我會先從頭 (相對來說)。我假設您有全新的 Azure 網站 (結果的成功 「 azure 站台建立 — git"命令) 和簡單快速的應用程式啟動並執行。

在第一期專欄中 (msdn.microsoft.com/magazine/mt185576),我提到 npm,Node 封裝管理員。這是所有的節點應用程式的程式庫和相依性管理員。它是類似於 Microsoft.NET Framework 世界中的 NuGet 所扮演的角色。事實上,兩者都已的激勵 Ruby 寶藏讓它們可以共用許多相同的特性。

其實,所有的資訊、 npm 取決於包含所有相依性的 JSON 檔案 — 實際執行環境和開發階段專用封裝 — 在單一檔案稱為 package.json。所以邏輯的第一個步驟是做為相依性,建立使用 Express 的檔案中所示 [圖 1

[圖 1 使用 Express 建立檔案做為相依性

{
  "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 世界的 「 文字編輯器和命令列 」 網站。如此一來,所謂的節點開發人員應該知道如何以手動方式編輯不論任何工具的可用性。第二,有兩個集合的相依性。相依性是 npm 應該安裝在生產類型環境中的封裝。DevDependencies 是完全由開發人員使用的套件。

現在請試想一下最簡單的方式是相依性時會加以安裝應用程式 (透過 Git) 推入至 Azure。當 devDependencies 安裝 (以及相依性內容) 安裝在開發人員膝上型電腦上的封裝中所示 [圖 2

安裝程式的相依性
[圖 2 安裝相依性

說到這裡,您應該立即這麼。只要 package.json 檔案目前的目錄中,輸入 「 npm 安裝 」 在命令列] 和 [監看式 npm 提取下 express,lodash (函式和方法,包括對應和篩選,以及陣列和物件的擴充功能等某些功能工具便利程式庫),或做為靜態 (這我稍後將討論) 到本機電腦。

像 NuGet 不只是封裝,但所有其相依性也會安裝 npm。這是什麼造成樹狀結構顯示終端機中。針對大型的範疇內納入許多受歡迎的封裝的封裝,此顯示可以取得很長。Npm 也工具我省略了兩個項目在我 package.json 中的附註: 這個封裝是來自該儲存機制欄位和讀我檔案資料。這些用大部分用於 npm 封裝安裝到中央 npm 程式庫。我找不到它們特別適用於應用程式,但肯定是如果您偏好較低的警告 npm 活動將它們沒有壞處。

隨著這一系列持續,我要加入至 package.json,因此您應該定期執行 「 npm 安裝 」 的其他套件以取得新的封裝。為出名,請注意在 express、 安裝輸出樹狀目錄中偵錯封裝 (用我在上一篇文章中) 是相依性,但我並未將它放入 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) 的最新版本,即使它已經存在。但第三種方法,使用另一個封裝稱為 scaffold 出快速應用程式的 yeoman 但是一部分的目標是了解平均值中所有的移動部分我就把的稍後。

大家好,Express

一旦安裝 Express 位元之後,就很容易撰寫無所不在的事 Express 中的"hello world"。(因為這是做為"main"的項目有何種 package.json) 呼叫 app.js 檔案中中的程式碼 [圖 3 提供簡單但必要時對神電腦科學。

[圖 3 Hello World Express 的程式碼

// 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 應用程式本身 — 因此,它會進入應用程式 (依慣例)。

下一行是 Express 呼叫路由。這是許多相似的更多熱門 ASP.NET 和 ASP.NET MVC 中的路由表的最新。這會對應要求動詞 (get) 的相對 URL 路徑 ("/"在此情況下) 的函式。在此情況下,它是匿名函式常值會以"Hello World"。 請注意函式也會使用 debug 物件 spew 快速一行之後接收要求。

最後,程式碼會檢查目前的環境以查看是否有連接埠環境變數所指定 (有可能會在 Azure 中)。如果沒有,它會將 3000 指派給連接埠。然後應用程式物件就會通知接聽,這是封鎖的呼叫。它將會執行匿名函式常值時它就會開始接聽傳入。然後,程序只會等待傳入的要求。假設要求是"/,"回覆與"Hello World"。

偵錯、 Express 和您

如同前幾期所提到,偵錯輸出不會顯示除非偵錯環境變數設定為需要的步驟中所使用的相同字串。在此情況下,這是應用程式。Express 也會使用偵錯而偵錯設定為"*,"則也會顯示所有快速診斷輸出。可能有點太長篇大論以用於偵錯定期執行,但它可以看到它在使用 Express 的初期捲動很有幫助。這可協助讓您了解各種不同的組件和什麼正在時叫用。沒有顯示在其輸出 (具有一些要求) 的範例 [圖 4

Express with 偵錯記錄
[圖 4 Express with 偵錯記錄

若要關閉偵錯,只是設定為 nothing 的偵錯。若要檢視多個偵錯資料流,而非全部的它們只是逗號分開名稱:

DEBUG=app,express:router,express:router:layer

該命令將只會顯示這些三個偵錯資料流中的輸出。

總結

在許多方面 Express 很像 ASP.NET。這不只如何處理 HTTP 流量,但它做為一種 「 中樞 」 周圍數十 (如果沒有數百個) 的其他封裝相依和擴充的方式則為 true。"做 static"封裝,例如提供 Express 應用程式預先建置的方式提供靜態 (也就 「 不執行在伺服器端 」) 的資產,例如影像和字型的目錄。在下一步一篇中,我會先看看如何使用 Express 要求和回應物件。(如果您無法等到,簽出的 Express 文件 expressjs.com。) 同時...祝各位寫程式!


Ted Neward是在 iTrellis,顧問服務公司的技術長。他曾撰寫 100 個以上的文章和著作或合著十多本書籍,其中包括 「 專業 F # 2.0"(Wrox 2010)。他是 F # MVP 和在世界各地研討會發表演說。他會查閱並定期 mentors — 與他連絡 ted@tedneward.comted@itrellis.com 如果您有興趣。

感謝以下技術專家對本文的審閱: Shawn Wildermuth
Shawn Wildermuth 他的名稱是十三時間 Microsoft MVP (ASP.NET/IIS)、 八本書籍的作者和十幾進行軟體開發的文章和 Pluralsight 作者有超過 15 個課程。他是 Wilder 心中的其中一個 (http://wilderminds.com) 和他的部落格 mailto http://wildermuth.com