Middleware<中間件>

什麼是中間件?

中間件(middleware)就是處理HTTP請求的函數,用來完成各類特定的任務,好比檢查用戶是否登陸、分析數據、以及其餘在須要最終將數據發送給用戶以前完成的任務。 它最大的特色就是,一箇中間件處理完,能夠把相應數據再傳遞給下一個中間件。html

一個不進行任何操做、只傳遞request對象的中間件,大概是這樣:express

function Middleware(request, response, next) { 
   next();
}

上面代碼的next爲中間件的回調函數。若是它帶有參數,則表明拋出一個錯誤,參數爲錯誤文本。app

function Middleware(request, response, next) { 
   next('出錯了!');
}

 拋出錯誤之後,後面的中間件將再也不執行,直到發現一個錯誤處理函數爲止。若是沒有調用next方法,後面註冊的函數也是不會執行的。函數

all函數的基本用法

和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基本用法1

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基本用法2

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屬性,判斷請求的網址,從而返回不一樣的內容。

原文連接描述

相關文章
相關標籤/搜索