1. 程式人生 > >Express-及中介軟體的簡單理解

Express-及中介軟體的簡單理解

Express

Express 是一個基於node平臺,保持最小規模的靈活的 Node.js Web 應用程式開發框架,Node.js基礎上擴充套件對了web應用開發所需要的基礎功能 Web 和移動應用程式提供一組強大的功能。

首先安裝express

    cnpm install express -g

其次:通過express-generator可以快速的幫我們搭建一個應用的骨架。

    npm install express-generator -g

輸入命令:express -e,搭建骨架。

1 //引入模組
2 const express = require('express');
3 //app:express的返回值,express的例項 4 const app = express() 5 //get請求 6 app.get('/', (req, res) => res.send('Hello World!')) //傳送一個helloword 7 app.listen(3000)

 

Express使得我們開發Web應用更加快捷、方便。

舉一個例子:

node.js在控制檯打印出一個"你好"

 

1 var http = require("http");
2 http.creatServer((req,res)=>{
3 console.log("你好"); 4 }).listen(6666);

 

這樣,當我們處理各種資料傳送請求時,需要將所有請求的處理程式碼寫在creatSercer包裹的函式裡。

而用Express實現在控制檯打印出一個"你好"。

 

1 var express = require("express");
2 var http = require("http");
3 var app = express();
4 http.creatServer(app);
5 //處理使用者請求(路由)
6 app.get("/",()=>{
7 console.log("你好"); 8 })

 

Express處理各種資料傳送請求是通過Express執行函式去呼叫對應的方法,其實也是執行express()後,會返回一個函式,賦值給app,app就是express,然後請求都會被app這個函式所處理,可以這樣認為,在express內部,有一個函式的陣列,每一次來一個請求,express內部就會執行這個陣列中滿足條件的函式,而app.ues就是用來使用中介軟體的。

 

中介軟體

 

 

 

說到中介軟體,官網對他的闡述是這樣的:

“Express是一個自身功能極簡,完全是路由和中介軟體構成一個web開發框架:從本質上來說,一個Express應用就是在呼叫各種中介軟體。由此可見中介軟體在Express開發中的重要性,可能官網所說的比較官方,那麼來舉個例子:

可以想象一下我們租房時遇到的房產中介,他會給我們提供一些資訊,他所處的角色是介於房主與我們之間,他的作用就是會帶我們看房等我所請求的要求,而他的作用,就相當於中介軟體的作用,就相當於伺服器的請求和回覆之間,租客和房東之間。

簡單來說,由於在用node api進行http請求的處理時要求引入很多的模組,類似於url模組、fs模組等等,並且在對http請求做處理時需要很多重複但不是邏輯上的操作,所以就會出現已經幫你封裝好的中介軟體,讓你不再耗費時間在資料處理和異常處理上,這樣可以大大減少程式碼量,邏輯更清晰,具有便捷高效的擴充套件性。

而中介軟體主要解決了什麼問題呢?

它主要是拓展了一些resreq的方法。這些方法可以去幫我們解決一些複雜的,需要自己去解決的問題。因此我就來總結一下中介軟體。

一、中介軟體的結構

 

app.use([path],function)

 

path:是路由的url,預設引數為"/",意義是路由到這個路徑是使用這個中介軟體,這個引數為需要的時候寫不需要的時候可以不寫。

 

function:中介軟體函式,這個函式可以理解為:function(req,res,next)

 

自上面的結構中,我們瞭解了中介軟體使用時的第二個引數是一個函式,而這個函式擁有三個引數(req,res,next);那麼下面我們了來說一下這三個引數的作用。

 

當每個請求到達伺服器時,nodejs會為了某個請求而去建立一個請求物件(req),該請求物件包含客戶端提交上來的資料,同時也會建立一個響應物件(res),響應物件主要負責將伺服器的資料響應到客戶端。

 

而最後一個引數next是一個方法,因為開發一個專案需要使用到多箇中間件,而想要執行下一個中介軟體,那麼上一個中介軟體必須執行next(),如果沒有呼叫next()的話,就不會呼叫下一個函數了,也就是說呼叫會被終止,再一次來舉個栗子:

 

1 app.use((req,res,next)=>{
2     console.log('111');
3     next();
4     console.log('222');
5 })
6 app.use((req,res,next)=>{
7     console.log('333');
8     next();
9 });

 

 

 

 

控制檯輸出的順序為:111 333 222

二、中介軟體的分類

1、內建的中介軟體

express.static Express目前唯一的內建中介軟體,它基於serve-static,用來處理靜態資原始檔,它有兩個引數,引數root是指提供靜態資源的根目錄,可選的options引數擁有如下屬性。

 

2、第三方中介軟體

 

Express是一款提供路由和中介軟體的Web框架,但其本身的功能卻異常精簡,Express應用的功能通過第三方中介軟體來新增。

 

有關第三方中介軟體,分析幾個比較重要和常用的。

 

body-parser:解析body中的資料,並將其儲存為Request物件的body屬性。

 

cookie-parser:解析body中的資料,並將其儲存為Request物件的cookie屬性。

 

express-session:解析服務端生成的sessionid對應的session資料,並將其儲存為Request物件的session屬性。

 

query:這個中介軟體,將一個查詢字串從URL轉換為JS物件,並將其儲存為Request物件的query屬性。

 

如果這樣不好理解的話,中介軟體也可以這樣分為三大類:

 

1>pre-request —— 通常用來該項reques的原始資料

 

2>reqest(請求)response(響應) —— 大部分中介軟體都在這裡,為reqres的拓展方法,功能各異。

 

3>post-response —— 全域性異常處理,改寫response資料等。

 

三、中介軟體的理解

 

最後,我們再來分析一下從瀏覽器位址列輸如url到客戶端顯示資料之間這個過程到底發生了什麼。

 

瀏覽器向伺服器傳送了一個請求後,伺服器首先收到req的資料請求,然後服務端進行處理,處理完了之後傳送res響應回去,這中間就一定有一個函式將這些資料做了處理,這個處理資料的函式,就是中介軟體,而中介軟體執行的順序就是你定義的順序。由此可見,中介軟體可以這麼理解:

 

1、封裝了一些處理一個完整事件的功能函式。

 

2、非內建的中介軟體需要通過安裝後,req到檔案就可以執行。

 

3、封裝了一些複雜但肯定通用的功能。