Nodejs Express 4.X 中文API 1--- Application篇

相關閱讀:javascript

 Express 4.X API 翻譯[一] --  Application篇css

 Express 4.X Api 翻譯[二] --  Request篇html

 Express 4.X Api 翻譯[三] --- Response篇java

 Express 4.X Api 翻譯[四] --- Router篇node

 

本文是Express 4.x Api翻譯系列的第一篇。因爲筆者最近在學習NodeJs,剛剛接觸了Node式的開發模式,被異步IO的編程方式深深吸引,因而準備系統學習一下這項新技術。由於沒有任何NodeJs的基礎,也不知道從何學起,以前也研究過ByVoid的《NodeJs開發指南》也不知道算不算入門。想試着寫一下里面的微博例子,可是發現本身安裝的Express是最新的4.X,網上對於Express的內容原本就不多,更別說是最新的開發文檔了,索性就開始先翻譯一下Express的Api,本篇是Express 4.x中文手冊的第一篇,如下內容來自原文網站 >>>Express官方網站jquery

 

寫在前面正則表達式

本文適用的Express版本爲V4.0.0,一下內容不能保證一樣適用於以前的版本。因爲筆者屬於剛剛接觸Express因此沒有研究過以前的版本與4.0.0版本的區別,以後在接下來的時間裏,筆者會翻譯更多關於Express的文章供你們學習。express

express()

建立一個express應用編程

 

 setting

如下的設置選項將爲您展現如何改變Express的行爲:json

  • env 運行時環境,默認爲process.env.NODE_ENV(NODE_ENV環境變量)或者」development」;
  • trust proxy 激活反向代理模式,默認爲未激活;
  • jsonp callback name JSON回調函數替換體,默認爲空;
  • case sensitive routing 用於激活路由大小寫敏感,默認爲未激活,」/Foo」和」/foo」是相同對待的;
  • strict routing 激活嚴格路由模式,默認」/foo」和」/foo/」是相同對待的;
  • view cache 激活模板引擎編譯緩存,在生產模式默認是開啓的;
  • view engine 缺省狀態下默認的模板引擎
  • views 模板目錄地址,默認爲」process.cwd() + ‘/views’」

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.use([path],function)

使用給定的中間件function,可選參數path,默認爲」/」.

如今「掛載」的路徑是被剝去的和對於中間件來講是不可見的,也就是說掛載的路徑不會在req路出現,對中間件function的回調參數req中找不到path。這麼設計是爲了讓中間件能夠在不須要更改任何代碼就能夠在任意前綴的路徑下執行.
這裏有個具體的例子,使用」./public」來管理靜態文件,使用」express.static()」中間件

例如你想爲全部的靜態文件增長前綴」/static」,你可使用「掛載」功能來支持者也操做。被掛載的中間件函數是不會被調用的除非req.url中包含這個前綴,當函數被調用時,這個前綴是被剝去的。固然,這隻會影響這個函數,後面的中間件仍是會看見req.url中的」/static」被包含的,除非這些中間件也被掛載在」/static」下。

使用「被定義的」app.use()的順序很是重要,它們將被順序調用,所以app.use()調用的前後順序決定了中間件的優先級。例如一般任何的日誌記錄中間件將被定義在任何被使用的中間件以前:

如今假如你想忽略請求靜態文件的記錄,可是又想繼續記錄logger()被定義以後的路由和中間件,那麼你只須要將static()移動到logger()以前就能夠了。

另外一個例子是你可能會使用多個文件夾提供靜態文件服務,下面的例子將會才優先從」/public」文件夾選取靜態文件。

 app.engine(ext,callback)

註冊模板引擎的callback來處理擴展名爲ext的文件,默認狀況下會根據文件的擴展名開引入相應的模板引擎。例如,若是你試圖渲染一個」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)。
或者說你只是傳遞一個回調函數,在這種狀況下,你將會有機會去改變app.param()的API,例如express-params定義了下面的回調狀況,容許你經過正則表達式來限制給定的參數。

 

這個例子有點高級,當檢測到若是第二個參數爲正則表達式的話,返回一個很像上面」user」例子的行爲的回調函數

這個函數如今能夠很是有效的用來校驗參數,或者提供正則捕獲後的分組。

app.VERB(path,[callback...],callback)

app.VERB()方法爲Express提供了路由方法,這裏的VERB指的是一種HTTP動做,好比說app.post()。能夠提供多個callback,這多個callback都將會被同等對待,他們的行爲就像是中間件同樣,但也有一個例外的狀況,若是某一個callback調用了next(‘route’),那麼他後面的callback就會被忽略。這種狀況會被應用在當知足一個路由前綴,可是不須要用這個回調函數處理這個路由,因而就把它向後傳遞。

下面的這個代碼片斷演示了一個最簡單的路由定義。Express會吧字符串表達式轉換爲正則表達式,而後在內部匹配傳入的表達式。請求參數將不會被考慮進來。例如 「GET /」將會匹配下面的路由規則,一樣 「GET /?name=tobi」也會被下面的規則匹配。

正則表達式也是能夠被使用的,尤爲是在你有特別的限制時這將會是很是有用的,例以下面的例子將會匹配 「GET /commits/71dbb9c」 一樣也會匹配 「GET /commits/71dbb9c..4c084f9″。

能夠傳遞一些回調,這對於複用一些加載資源、校驗中間件頗有做用

若是你有衆多的中間件爲一個路由規則,你也可使用路由ap的all()。

全部的中間件規則將會被應用與GET 和 POST 請求。

app.all(path,[callback...],callback)

這個方法函數就像是app.VERB()方法,可是不一樣的是他匹配全部的HTTP動做。
這個方法在將」全局」映射爲特定路徑的邏輯映射或者是任意映射是很是有用的。例如,若是你要把下面的路由定義放置在其餘全部路由定義以前,這將致使從這個規則起全部的請求都將須要身份驗證,並自動加載一個用戶。請記住,全部的回調函數都不該該被當作終點,loadUser能夠被當作是一個任務,而後去調用next()來繼續匹配隨後的路由規則。

它至關於:

另外一個更好的例子就是全局白名單函數,這個例子很像以前的,然而它限制了前綴必須爲」/api」:

 app.route(path)

返回一個路由的實例而後能夠用於處理HTTP動做使用可選擇的中間件。使用app.route()是一個推薦的方法來避免重複命名路由規則以及由此帶來的錯誤。

 app.locals

應用程序的本地變量會被附加給全部在這個應用程序內渲染的模板。這是一個很是有用的模板函數,就像是應用程序級的數據同樣。

 

app.locals對象是一個Javascript對象。添加到它的屬性,將會被當作局部變量在應用程序中被公開。

默認狀況下Express之有一個應用程序級的局部變量,那就是setting。

 app.render(view,[options],callback)

渲染 view,callback用來處理返回渲染後的字符串。這個是res.render()的應用程序級的版本,它們的行爲是同樣的。

 app.listen()

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

經過express()返回的 app 事實上是一個Javascript函數,它被設計爲傳遞給node的http Server做爲處理請求的回調函數。因爲app並非經過HTTP或HTTPS繼承來的,它只是一個簡單的callback,因此這容許你很輕鬆的使用一樣的代來處理HTTP和HTTPS請求。

app.listen()方法只是被定義爲一個簡單的方法,若是你但願是用HTTPS協議或者同時使用HTTP和HTTPS,可使用上面的技術。

 轉自:http://www.90it.net/expressjs-4-api-zh-cn-application.html

相關文章
相關標籤/搜索