node 學習筆記(3)--Express

Express起步

安裝Express
clipboard.pngnode

一個最小的Express 程序
clipboard.pngexpress

生成程序開發框架
clipboard.pngnpm

package.json文件

clipboard.png
Express猜不出你要用依賴項的哪一個版本,因此你最好給出模塊的主要、次要及修
訂版本號,以避免引入意料以外的bug。好比明確給出"express":"3.0.0"json

要添加模塊的最新版,好比這裏的EJS,能夠在安裝時給npm傳入--save標記。
clipboard.png瀏覽器

獲得
clipboard.png緩存

無論express(1)何時生成package.json文件,你都須要安裝依賴項(如圖8-9所示)。執行npm
install安裝依賴項,而後執行node app.js啓動程序。在瀏覽器中訪問http://localhost:3000查
看程序
clipboard.png服務器

Express驅動配置系統

clipboard.png

設置環境變量
clipboard.pngapp

這些環境變量會出如今你程序裏的process.env對象中框架

儘管環境變量NODE_ENV源自Express,但如今不少Node框架都用它通知Node程序它在什麼環
境中,默認爲開發環境。函數

如代碼清單8-3所示, app.configure()方法接受一個表示環境的可選字符串,以及一個函
數。當環境與傳入的字符串相匹配時,回調函數會被當即調用;

clipboard.png

Express視圖系統配置

改變查找目錄
clipboard.png
_dirname:
clipboard.png

改變默認視圖模板引擎
由於原先你通 -e 建立的程序,它會默認 用ejs 做爲視圖模板;
經過下面的設置能夠改變默認視圖模板
clipboard.png

用文件擴展名指定模板引擎
經過加後綴名的方式強制改變默認模板
clipboard.png

視圖緩存

  1. 生產環境中會默認啓用view cache設定,並防止後續的render()調用執行硬盤I/O。
  2. 模板的內容保存在內存中,性能會獲得顯著提高。
  3. 啓用這個設定的反作用是隻有重啓服務器才能讓模板文件的編輯生效,因此在開發時會禁用它。

視圖查找

  1. 當res.render()或app.render()被調用時, Express會先檢查是否有文件在這個絕對路徑上。
  2. 接着會找視圖目錄設定的相對路徑。
  3. Express會嘗試使用index文件

clipboard.png

視圖顯示

clipboard.png

虛假照片數據
clipboard.png

列表路由
clipboard.png

添加photos.list路由
在./app.js中引入photos模塊,訪問你剛剛寫好的exports.list函數。
爲了在首頁/中顯示照片,要把photos.list函數傳給app.get()方法,它會把路徑/上的HTTP GET方法
映射到這個函數上
clipboard.png

寫照片列表視圖的模板
clipboard.png

將數據輸出到視圖中的方法

  1. 將本地變量直接傳給res.render()
    clipboard.png
  2. 用app.locals傳遞程序層面的變量
    Express默認只會向視圖中輸出一個程序級變量, settings,這個對象中包含全部用app.set()設定的值。比 如app.set('title', 'My Application')會把settings.title輸出到模板中
    clipboard.png
    clipboard.png
    爲了方便, app.locals也被作成了一個JavaScript函數。當有對象傳入時,全部的鍵都會被合併
    若是你有一個輸出了幾個函數的Node模塊helpers.js,能夠像下面這樣把全部函數輸出到視圖中:
    clipboard.png
  3. 用res.locals傳遞請求層面的本地變量

處理表單和文件上傳

實現照片上傳功能總共分三步:
 定義照片模型;
 建立照片上傳表單;
 顯示照片列表。

設定照片上傳目的地址的定製配置項
clipboard.png

實現照片模型
clipboard.png
Mongoose的模型上有全部的CRUD方法(Photo.create、 Photo.update、 Photo.remove
和Photo.find),因此這樣就搞定了。

建立照片上傳表單
你要把照片目錄傳給POST處理器,並返回一個路由回調,以便處理器能夠訪問這個目錄。
把新路由添加到app.js中,放在默認(/)路由下面:
clipboard.png

處理照片提交

  1. multipart()中間件(包含在bodyParser中),它會給你一個req.files對象,表明上
    傳的文件,並把這個文件保存到硬盤中。
  2. 你能夠經過req.files.photo.image訪問這個對象。上傳表單中的輸入域, photo[name],能夠經過req.body.photo.name訪問到
    clipboard.png
    clipboard.png

顯示上傳照片列表
用Mongoose提供的Photo.find獲取你上傳的照片
clipboard.png

建立資源下載

建立照片下載路由 /photo/:id/download
在模板中添加標記:
clipboard.png
app.js中,在路由定義中找個你喜歡的地方把下面這條路由加進去:
clipboard.png

實現照片下載路由
clipboard.png
設定下載的文件名
你能夠用res.download()的第二個參數定義一個定製的文件名,在下載時取代默認的原始
文件名。代碼清單8-21修改了以前的實現,給出照片被上傳時提供的名稱,好比Flower.jpeg
clipboard.png

相關文章
相關標籤/搜索