expressjs

expressjs

Express是一個簡潔而靈活的 node.js Web套用框架, 提供一系列強大特性幫助你創建各種Web套用。

簡介

expressjsexpressjs

Express

是一個簡潔而靈活的 node.js

Web套用框架, 提供一系列強大特性幫助你創建各種Web套用。

編程接口

express()

創建一個express應用程式

app.set(name, value)

將設定項 name 的值設為 value

app.get(name)

獲取設定項 name 的值

app.enable(name)

將設定項 name 的值設為 true.

app.disable(name)

將設定項 name 的值設為 false.

app.enabled(name)

檢查設定項 name 是否已啟用

app.disabled(name)

檢查設定項 name 是否已禁用

app.configure([env], callback)

當 env 和 app.get('env')(也就是 process.env.NODE_ENV) 匹配時, 調用callback。保留這個方法是出於歷史原因,後面列出的if語句的代碼其實更加高效、直接。使用app.set()配合其它一些配置方法後,沒有必要再使用這個方法。

更高效且直接的代碼如下:

app.use([path], function)

使用中間件 function,可選參數path默認為"/"。

掛載的路徑不會在req里出現,對中間件 function不可見,這意味著你在function的回調參數req里找不到path。這么設計的為了讓間件可以在不需要更改代碼就在任意"前綴"路徑下執行

這裡有一個實際套用場景,常見的一個套用是使用./public提供靜態檔案服務,用 express.static() 中間件:

如果你想把所有的靜態檔案路徑都前綴"/static", 你可以使用“掛載”功能。如果req.url 不包含這個前綴, 掛載過的中間件不會執行。當function被執行的時候,這個參數不會被傳遞。這個只會影響這個函式,後面的中間件里得到的 req.url里將會包含"/static"

使用 app.use() “定義的”中間件的順序非常重要,它們將會順序執行,use的先後順序決定了中間件的優先權。比如說通常 express.logger() 是最先使用的一個組件,紀錄每一個請求

如果你想忽略請求靜態檔案的紀錄,但是對於在 logger()之後定義的路由和中間件想繼續紀錄,只需要簡單的把static() 移到前面就行了:

另一個現實的例子,有可能從多個目錄提供靜態檔案服務,下面的例子中會優先從"./public"目錄取檔案

settings

下面的內建的可以改變Express行為的設定

env 運行時環境,默認為 process.env.NODE_ENV 或者 "development"

trust proxy 激活反向代理,默認未激活狀態

jsonp callback name 修改默認?callback=的jsonp回調的名字

json replacer JSON replacer 替換時的回調, 默認為null

json spaces JSON 回響的空格數量,開發環境下是2 , 生產環境是0

case sensitive routing 路由的大小寫敏感, 默認是關閉狀態, "/Foo" 和"/foo" 是一樣的

strict routing 路由的嚴格格式, 默認情況下 "/foo" 和 "/foo/" 是被同樣對待的

view cache 模板快取,在生產環境中是默認開啟的

view engine 模板引擎

views 模板的目錄

app.engine(ext, callback)

註冊模板引擎的 callback 用來處理ext擴展名的檔案默認情況下, 根據檔案擴展名require() 對應的模板引擎。比如你想渲染一個 "foo.jade" 檔案,Express會在內部執行下面的代碼,然後會快取require(),這樣就可以提高后面操作的性能

那些沒有提供 .__express 的或者你想渲染一個檔案的擴展名與模板引擎默認的不一致的時候,也可以用這個方法。比如你想用EJS模板引擎來處理 ".html" 後綴的檔案:

這個例子中EJS提供了一個.renderFile() 方法和Express預期的格式: (path, options, callback)一致, 可以在內部給這個方法取一個別名ejs.__express,這樣你就可以使用".ejs" 擴展而不需要做任何改動

有些模板引擎沒有遵循這種轉換, 這裡有一個小項目consolidate.js 專門把所有的node流行的模板引擎進行了包裝,這樣它們在Express內部看起來就一樣了。

app.param([name], callback)

路由參數的處理邏輯。比如當 :user 出現在一個路由路徑中,你也許會自動載入載入用戶的邏輯,並把它放置到 req.user , 或者校驗一下輸入的參數是否正確。

下面的代碼片段展示了callback很像中間件,但是在參數裡多加了一個值,這裡名為id.它會嘗試載入用戶信息,然後賦值給req.user, 否則就傳遞錯誤next(err).

另外你也可以只傳一個callback, 這樣你就有機會改變 app.param() API.比如express-params定義了下面的回調,這個允許你使用一個給定的正則去限制參數。

下面的這個例子有一點點高級,檢查如果第二個參數是一個正則,返回一個很像上面的"user"參數例子行為的回調函式。

這個函式現在可以非常有效的用來校驗參數,或者提供正則捕獲後的分組。

app.listen()

在給定的主機和連線埠上監聽請求,這個和node的文檔http.Server#listen()是一致的

express()返回的app實際上是一個JavaScriptFunction,它被設計為傳給node的http servers作為處理請求的回調函式。因為app不是從HTTP或者HTTPS繼承來的,它只是一個簡單的回調函式,你可以以同一份代碼同時處理HTTP and HTTPS 版本的服務。

app.listen() 方法只是一個快捷方法,如果你想使用HTTPS,或者同時提供HTTP和HTTPS,可以使用上面的代碼

版本

Express當前版本:v.4.12.3

相關詞條

熱門詞條

聯絡我們