1.介紹
說明:Express框架中間件是指在處理HTTP請(qǐng)求前或后對(duì)請(qǐng)求和響應(yīng)進(jìn)行處理的函數(shù)。具體而言,中間件可以:
- 執(zhí)行一些公共的邏輯,比如身份驗(yàn)證、日志記錄、錯(cuò)誤處理等。
- 修改請(qǐng)求和響應(yīng),比如緩存、壓縮等。
- 控制請(qǐng)求流,比如路由控制、URL重定向等。
Express中間件可以是一個(gè)函數(shù)或是一組函數(shù),它們按照定義的順序依次執(zhí)行。
2. 全局中間件
2.1介紹
說明:全局中間件是指在應(yīng)用程序中處理每個(gè)請(qǐng)求之前和之后執(zhí)行的中間件。這些中間件可以用于執(zhí)行各種任務(wù),例如身份驗(yàn)證、日志記錄、處理錯(cuò)誤等。在Express.js中,可以通過app.use()函數(shù)將中間件添加到應(yīng)用程序中,使其成為全局中間件。這樣,每個(gè)請(qǐng)求都會(huì)經(jīng)過這個(gè)中間件,以便在應(yīng)用程序中進(jìn)行統(tǒng)一處理。
2.2聲明中間件(其實(shí)就是一個(gè)函數(shù),函數(shù)有三個(gè)形參而已)
// 聲明中間件函數(shù)
function recordMiddle(req,res,next){
//服務(wù)器的訪問日志
//獲取url和ip
let {url,ip}=req
//將信息保存在文件中
fs.appendFileSync(path.resolve(__dirname,"./access.log"),`${url} ${ip}\r\n`)
//調(diào)用next
next()
}
說明:next()
是一個(gè)函數(shù),表示中間件函數(shù)處理完當(dāng)前請(qǐng)求后,將請(qǐng)求轉(zhuǎn)移給下一個(gè)中間件函數(shù)來處理。如果當(dāng)前中間件函數(shù)不調(diào)用next()
,則請(qǐng)求就會(huì)被阻塞,無法繼續(xù)向下執(zhí)行。
2.3使用中間件
//使用中間件函數(shù)
app.use(recordMiddle)
?2.4完成獲取url地址練習(xí)
const express=require("express")
const fs=require("fs")
const path=require("path")
const app=express()
// 聲明中間件函數(shù)
function recordMiddle(req,res,next){
//服務(wù)器的訪問日志
//獲取url和ip
let {url,ip}=req
//將信息保存在文件中
fs.appendFileSync(path.resolve(__dirname,"./access.log"),`${url} ${ip}\r\n`)
//調(diào)用next
next()
}
//使用中間件函數(shù)
app.use(recordMiddle)
app.get('/home',(req,res)=>{
res.send("前臺(tái)首頁")
})
app.get('/admin',(req,res)=>{
res.send("后臺(tái)首頁")
})
app.all('/*',(req,res)=>{
res.send("<h1>404</h1>")
})
app.listen(9000,()=>{
console.log(`9000端口啟動(dòng)成功`);
})
2.5效果
3.路由中間件
3.1介紹
說明:路由中間件是一個(gè)處理HTTP請(qǐng)求的函數(shù),它根據(jù)請(qǐng)求的HTTP方法和路由路徑來匹配一個(gè)或多個(gè)中間件函數(shù),在這些中間件函數(shù)中執(zhí)行一些操作,最終返回一個(gè)HTTP響應(yīng)。
3.2聲明中間件函數(shù)
//聲明中間件,放在受約束的規(guī)則當(dāng)中
let checkCode = (req, res, next) => {
// 判斷url中code是否包含521
if (req.query.code === "521") {
next();
} else {
res.send("無效");
}
};
3.3使用中間件(放在受約束的規(guī)則當(dāng)中)
app.get("/pay", checkCode, (req, res) => {
res.send("支付頁面");
});
說明:當(dāng)url地址有/pay的情況下,執(zhí)行checkCode中間件函數(shù)。如果請(qǐng)求參數(shù)的code=521,那么就繼續(xù)進(jìn)行,如果沒有,那么則無效。
3.4練習(xí)
說明:針對(duì)/admin /setting 的請(qǐng)求,需要URL攜帶code=521參數(shù),如沒有攜帶提示[無效]。
//針對(duì)/admin /setting 的請(qǐng)求,需要URL攜帶code=521參數(shù),如沒有攜帶提示[無效]
const express = require("express");
const app = express();
app.get("/home", (req, res) => {
res.send("前臺(tái)首頁");
});
//聲明中間件,放在受約束的規(guī)則當(dāng)中
let checkCode = (req, res, next) => {
// 判斷url中code是否包含521
if (req.query.code === "521") {
next();
} else {
res.send("無效");
}
};
app.get("/admin", checkCode, (req, res) => {
res.send("后臺(tái)首頁");
});
app.get("/pay", checkCode, (req, res) => {
res.send("支付頁面");
});
app.all("*", (req, res) => {
res.send("<h1>404</h1>");
});
app.listen(9000, () => {
console.log(`9000端口啟動(dòng)成功`);
});
3.5效果
文章來源:http://www.zghlxwxcb.cn/news/detail-543212.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-543212.html
到了這里,關(guān)于express框架中間件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!