1. 程式人生 > 其它 >node.js (三) express中介軟體

node.js (三) express中介軟體

技術標籤:小白筆記javascriptnode.js

express靜態資源託管

1.匯入express模組

 const express = require("express");

2.建立伺服器

const app = express();

3.靜態資源託管

 app.use(express.static('public'));
 app.use(express.static('static'));

4.開啟監聽

 app.listen(4399);

5 路由的使用

// 匯入express模組
const express = require("express"
); const querystring = require("querystring"); // 建立伺服器 const app = express(); // get請求資料 express已經封裝好了解析的方法 點query出來的就已經是物件 app.get("/search", (req,res) => { console.log(req); console.log(req.query); res.send("/search"); }) app.post("/add", (req,
res) => { // 使用get的方式獲取引數 獲取不到 因為他不是在url傳資料 // console.log(req); // console.log(req.query); var str = ""; req.on("data", data => { str += data; }) req.on("end", () => { console.log(str); var data = querystring.
parse(str); console.log(data); }) res.send("/add"); }) // 開啟監聽 app.listen(8848); 1

Express中介軟體

Express 是一個自身功能極簡,完全是由路由和中介軟體構成一個的 web 開發框架,從本質上來說,一個 Express 應用就是在呼叫各種中介軟體。

中介軟體(Middleware) 是一個函式,它可以訪問請求物件(request object (req)), 響應物件(response object (res)), 和 web 應用中處於請求-響應迴圈流程中的中介軟體,一般被命名為 next 的變數。

中介軟體的功能包括:

(1). 執行任何程式碼。

(2). 修改請求和響應物件。

(3). 終結請求-響應迴圈。

(4). 呼叫堆疊中的下一個中介軟體。

如果當前中介軟體沒有終結請求-響應迴圈,則必須呼叫 next() 方法將控制權交給下一個中介軟體,否則請求就會掛起。

Express 應用可使用如下幾種中介軟體:

(1). 應用級中介軟體

(2). 路由級中介軟體

(3). 錯誤處理中介軟體

(4). 內建中介軟體

(5). 第三方中介軟體

使用可選則掛載路徑,可在應用級別或路由級別裝載中介軟體,另外,你還可以同時裝在一系列中介軟體函式,從而在一個掛載點上建立一個子中介軟體棧。

app.use(url, (req, res, next)=>{
//中介軟體要執行的程式碼
//呼叫下一個中介軟體或路由
next( );
})

const express = require("express");
const app = express();

app.use("/",(req,res,next)=>{
    console.log("中介軟體")
    let {token} = req.query;
    if(token){
        next()  //  是否繼續往下執行
    }else{
        res.send("缺少token")
    }
})
//  test1介面
app.get("/test1",(req,res) => {
    console.log('test1');
    res.send(`test1 token為${req.query.token}`)
})
//  test2介面
app.get("/test2",(req,res) => {
    console.log('test2');
    res.send(`test2 token為${req.query.token}`)
})
//  開啟伺服器
app.listen(2000,() => {
    console.log('開啟在2000埠');
})

瀏覽器中訪問/test1 不帶token欄位

在這裡插入圖片描述
現在帶上token欄位訪問/test2
在這裡插入圖片描述
這就實現了通過中介軟體做全域性攔截,這種中介軟體屬於自定義攔截器.如果app.use()的第一個引數是 / 表示路徑,則第一個引數可以不寫,如下

app.use("/",(req,res,next)=>{
    next()  //  是否繼續往下執行
})

等同於

app.use((req,res,next)=>{
    next()  //  是否繼續往下執行
})

為什麼說這一種是全域性的 ,因為所有的介面都走這裡 接下來看區域性中介軟體
區域性中介軟體
第一個引數還是路徑 第二個引數是一個function 第三個引數還是function

const express = require("express");
const app = express();

app.get("/demo",(req,res,next) => {
    console.log('fun1');
},(req,res) => {
    console.log('fun2');
})
//  開啟伺服器
app.listen(2000,() => {
    console.log('開啟在2000埠');
})

現在請求/demo介面 瀏覽器中沒有響應 因為第一個回撥函式裡沒有next() 不會走到第二個回撥函式裡
終端列印
在這裡插入圖片描述

const express = require("express");
const app = express();

app.get("/demo",(req,res,next) => {
    console.log('fun1');
    next()
},(req,res) => {
    res.send("fun2")
    console.log('fun2');
})
//  開啟伺服器
app.listen(2000,() => {
    console.log('開啟在2000埠');
})

瀏覽器中訪問/demo
終端列印
在這裡插入圖片描述
這種叫區域性中介軟體,區域性中介軟體是 在哪個接口裡寫就只對哪個介面有用,區域性中介軟體可以寫無數個 只要在合適的地方使用next()就可以一個接一個的往下執行,一般情況下使用區域性中介軟體最多使用一兩個就夠了 使用多個區域性中介軟體 程式碼結構如下