中間件的功能和分類
中間件的本質就是一個函數,在收到請求和返回相應的過程中做一些我們想做的事情。Express文檔中對它的作用是這么描述的:
執行任何代碼。
修改請求和響應對象。
終結請求-響應循環。
調用堆棧中的下一個中間件。
分類
Express文檔中把他們分為了五類,但是他們的原理相同,只是用法不同:
應用級中間件
路由級中間件
錯誤處理中間件
內置中間件
第三方中間件
下面介紹常用中間件
express.static()
這是一個用來返回靜態文件的自帶中間件,不需要下載
就是一方法,直接往use()里面加
express.static(root, [options]) 第一個參數是靜態文件存儲的目錄
let server = express();//創建server,直接調用函數就行 server.use(express.static('./static/')); server.listen('8080');
處理之后,前端就可以在root目錄中訪問靜態文件了
body-parser:
用於解析post數據,這玩意er執行后會往req里面塞一個body,body里面就有處理好的數據
//所有的post請求都經過這個中間件 server.post('*',parser.urlencoded({ extended: false //給個屬性,一般不開 })) server.post('/reg',(req,res) => { console.log(req.body);//在這就可以使用解析好的body數據 })
multer:處理文件上傳
添加之后,會往req加一個files屬性
const multer = require('multer') let obj = multer({ dest: '上傳的文件所放的路徑' }) server.post(obj.any());//添加之后,會往req加一個files屬性
cookie-parser
用來操作cookie
const cookieParser = require('cookie-parser');//一個方法 server.use(cookieParser());//使用之后可使用req.cookie()方法,req.signedCookies server.get('/a',(req,res) => { console.log(req.cookies); res.cookie('a',998);//用於設置cookie res.send('over'); })
cookie方法的使用:
res.cookie(鍵,值)
res.cookie(鍵,值,{options})
options: 可選擇添加的配置
- domain:域名
- path:路徑,一般給個/
- maxAge:最大時長
- httpOnly:true 只有服務器能看到
- secure: true //只有https能用
- signed:true //是否簽名
cookie-session:
express中用於處理session的中間件
const cookieSession = require('cookie-session'); server.use(cookieSession({ keys:['1sfdsa44','asdfdaf'...]//循環密鑰 maxAge:多久過期 }))
使用之后可以使用req.session['鍵']獲取或設置session
關於cookie和session的理解:
用戶的cookie -> 服務器的密鑰簽名 -> session_id -> 通過cookie+session_id訪問服務器 -> 使用密鑰校驗cookie和session_id是否匹配
session就像一張身份證,防止有人偽造cookie訪問服務器