中間件(middleware)就是處理HTTP請求的函數,用來完成各類特定的任務,好比檢查用戶是否登陸、分析數據、以及其餘在須要最終將數據發送給用戶以前完成的任務。 它最大的特色就是,一箇中間件處理完,能夠把相應數據再傳遞給下一個中間件。html
一個不進行任何操做、只傳遞request對象的中間件,大概是這樣:express
function Middleware(request, response, next) { next(); }
上面代碼的next爲中間件的回調函數。若是它帶有參數,則表明拋出一個錯誤,參數爲錯誤文本。app
function Middleware(request, response, next) { next('出錯了!'); }
拋出錯誤之後,後面的中間件將再也不執行,直到發現一個錯誤處理函數爲止。若是沒有調用next方法,後面註冊的函數也是不會執行的。函數
和get函數不一樣app.all()函數能夠匹配全部的HTTP動詞,也就是說它能夠過濾全部路徑的請求,若是使用all函數定義中間件,那麼就至關於全部請求都必須先經過此該中間件。ui
格式:app.all(path,function(request, response));url
以下所示,咱們使用all函數在請求以前設置響應頭屬性。code
var express = require("express"); var app = express(); app.all("*", function(request, response, next) { response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); //設置響應頭屬性值 next(); }); app.get("/", function(request, response) { response.end("歡迎來到首頁!"); }); app.get("/about", function(request, response) { response.end("歡迎來到about頁面!"); }); app.get("*", function(request, response) { response.end("404 - 未找到!"); }); app.listen(80);
上面代碼參數中的「*」表示對全部路徑有效,這個方法在給特定前綴路徑或者任意路徑上處理時會特別有用,無論咱們請求任何路徑都會事先通過all函數。htm
use是express調用中間件的方法,它返回一個函數。中間件
格式:app.use([path], function(request, response, next){});對象
可選參數path默認爲"/"。
app.use(express.static(path.join(__dirname, 'public')));
如上呢,咱們就使用use函數調用express中間件設定了靜態文件目錄的訪問路徑。
如何連續調用兩個中間件呢,以下示例:
var express = require('express'); var app = express(); app.use(function(request, response, next){ console.log("method:"+request.method+" ==== "+"url:"+request.url); next(); }); app.use(function(request, response){ response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" }); response.end('示例:連續調用兩個中間件'); }); app.listen(80);
use方法不只能夠調用中間件,還能夠根據請求的網址,返回不一樣的網頁內容,以下示例:
var express = require("express"); var app = express(); app.use(function(request, response, next) { if(request.url == "/") { response.send("Welcome to the homepage!"); }else { next(); } }); app.use(function(request, response, next) { if(request.url == "/about") { response.send("Welcome to the about page!"); }else { next(); } }); app.use(function(request, response) { response.send("404 error!"); }); app.listen(80);
上面代碼經過request.url屬性,判斷請求的網址,從而返回不一樣的內容。
原文連接描述