Express 入門簡介

發表於2014-01-15

Express 是一個小巧且靈活的 Node.js Web應用框架,它有一套健壯的特性,可用於開發單頁、多頁和混合Web應用。

安裝

package.json 中手動新增 Express 依賴

相同的目錄執行:

命令列安裝 Express 直接執行:

安裝完後可以用 express 在命令列生成應用。

新增 app.js 檔案,寫個最簡單的應用,建立一個 Express 例項,開始監聽特定的埠 :

執行 node app 沒發生任何事情。

定義路由

我們給應用新增一些簡單的路由,Express 可以響應各種 HTTP 請求:

我們寫個真實的例子,給應用新增主頁:

注意 Express 為 response 物件新增了 send() 方法,一些模板程式碼可以處理響應。重啟應用,訪問 http://localhost:3000/ 看看。

request.send() API 智慧處理不同型別的資料,假如你想為網站新增簡單的基於 JSON 的 API ,Express 可以把返回結果轉換成 JSON 並設定適當的響應頭。

可想而知,新增更多的路由,並處理所需的響應,就可以構建一個應用。

通用的部落格應用

跳過 package.json 檔案,因為除了 name 屬性不一樣,其它項都一樣。來看 app.js 。

我們把 send 換成了 sendfile 。與其把大段的 HTML 字串放到 app.js 檔案裡,不如增加三個路由,主頁,關於頁,文章頁。

新增 HTML

主頁:

HTML 程式碼

這裡並沒什麼特別的,Express 將返回純靜態的 HTML 。關於頁和文章頁只不過把 title 和 h1 值改了。

由靜態到動態

Express 支援各種模板引擎,express 命令列可以新增對 Jade,EJS,JSHTML 和 Hogan 的支援。根據 Express 文件,任何模版引擎只要符合特定的簽名就可以生效。推薦從 consolidate.js 庫(模版引擎集合)裡面查詢喜歡的模版引擎。

我是 Handlebars 的超級粉,我的許多客戶端應用都用它,伺服器端自然也少不了它。要用 Handlebars 還需要安裝包裝庫 hbs

然後更新 app.js 使用此引擎:

為了使用 Handlebars ,我們通過 require 把 HBS 包裝庫引入,然後讓 Express 使用它。 預設情況下,Handlebars 會解析包含了特定引擎擴充套件的檔案,這裡是 something.hbs 。但也可以使用 “view engine”指令告訴 Express 動態解析 HTML 檔案。這樣我的編輯器可以提供良好的程式碼校驗和語法高亮。通過 app.engine 真正載入引擎。

最終路由用了新的 render 方法,Express 預設使用 views 資料夾,因此我們可以省略。由於 Express 記住了我們要解析的副檔名,所以它也可以省略。res.render(‘something’) 實際等於告訴 Express 查詢 views/something.html 。Express 基於模板引擎規則解析它,並返回到瀏覽器。

主頁顯示部落格條目

我們可以連線到 MySQL 或者 Mongo,這裡我們建立一個靜態的資料集,取名 blog.js ,它提供獲取一組條目和獲取一個條目功能。

我們還可以提供新增,編輯和刪除,這裡到此為止。再更新下 app.js :

我們用 require 引入資料集,如此可以呼叫它得到條目。

在主頁,我們給 render API 傳兩個引數,引數是一個物件,包含 title 和 entries 屬性。title 的值時字串,但是 entries 呼叫 blogEngine API 。我們傳的任何資料將對模版生效,主頁模版需要調整。

主頁模版程式碼

即使你從沒用過 Handlebars ,仍舊能猜到這裡的含義。#each 指令將迴圈一個陣列,{{}} 表示從部落格條目列表取到的引數。

建立一個佈局

你肯定關心剩下的 HTML 怎麼改,Express 用了模版引擎會自動支援佈局。這意味著我可以建立通用的網站設計佈局,Express 將利用它構造特定的頁面。按照約定,它取名 layout.something ,“something”是你使用的特定擴充套件。我們用了 HTML ,它就是 layout.html 。

layout.html 程式碼

關於頁面沒什麼亮點,我們跳過,下面看文章路由。URL 現在包含了標記 :id ,Express 可以建立動態的 URL ,用於對應請求引數。我們定義的連結像這樣: /article/

理論上,每一個部落格條目需要一個路由,但是建立一個抽象的路由匹配這些請求效果更好。 bodyParser (這一特性來源於 Connect 框架,的確對我很有幫助,它不僅支援查詢字串,而且支援表單主體,幾乎每個 Express 應用都會用到它。)

顯示個別文章

由於 URL 結尾包含動態值,我們可以把它傳給 blogEngine 物件,用得到的結果作為檢視的變數。

article.html 檔案

現在我們建立了一個真正動態,但是難看的應用,這是新主頁:

express-blog3-home

這是特定的部落格條目:

express-blog3-article

潤色!

我們加點基本的樣式,讓應用變好看點。Express 提供了簡潔的方式新增影象,JavaScript 庫和樣式表之類的靜態資源,簡單定義一個靜態資料夾,任何請求將從這個資料夾查詢檔案。

app.use(express.static(‘public’));

此時,如果請求 /foo.css,public 資料夾存在 foo.css 檔案,將返回它。我把 Bootstrap 和 jQuery 副本放到了 public 資料夾。

然後在我的 layout.html ,我可以引用這些資源。這是連結 bootstrap.css 的例子:

程式碼例項

Express 將自動檢查 public 資料夾,可以有多個靜態資料夾,甚至可以自定義 URL 字首。最終效果是極好的。

主頁:

express-blog4-home

文章頁:

express-blog4-article

進階?

延伸閱讀:

相關文章