日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Express全系列教程之(五):Express的中间件

發(fā)布時(shí)間:2023/12/20 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Express全系列教程之(五):Express的中间件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、中間件

從字面意思,我們可以了解到它大概就是做中間代理操作,事實(shí)也是如此;大多數(shù)情況下,中間件就是在做接收到請(qǐng)求和發(fā)送響應(yīng)中間的一系列操作。事實(shí)上,express是一個(gè)路由和中間件的web框架,Express 應(yīng)用程序基本上是一系列中間件函數(shù)的調(diào)用。

?

中間件函數(shù)可以執(zhí)行以下任務(wù):
執(zhí)行任何代碼。
對(duì)請(qǐng)求和響應(yīng)對(duì)象進(jìn)行更改。
結(jié)束請(qǐng)求/響應(yīng)循環(huán)。
調(diào)用堆棧中的下一個(gè)中間件函數(shù)。

?

中間件也分為應(yīng)用層中間件、路由中間件、內(nèi)置中間件、錯(cuò)誤處理中間件和第三方中間件。下面分別對(duì)以下進(jìn)行說明:

?

1.應(yīng)用層中間件

應(yīng)用級(jí)中間鍵綁定到app對(duì)象使用app.use和app.METHOD()-需要處理http請(qǐng)求的方法,例如GET、PUT、POST,將之前的get或者post替換為use就行。
例如下面實(shí)例:

const express=require("express");var app=express();//匹配路由之前的操作 app.use(function(req,res){console.log("訪問之前"); });app.get("/",function(req,res){res.send("主頁"); });app.listen(8080);

這時(shí)我們會(huì)發(fā)現(xiàn)http://localhost:8080/地址一直在加載,但命令行里顯示了“訪問之前”,說明程序并不會(huì)同步執(zhí)行,如果使用next來是路由繼續(xù)向下匹配,那么就能又得到主頁數(shù)據(jù)了:

const express=require("express");var app=express();//匹配路由之前的操作 app.use(function(req,res,next){console.log("訪問之前");next(); });app.get("/",function(req,res){res.send("主頁"); });app.listen(8080);

  當(dāng)然也可以簡(jiǎn)化寫法:

const express=require("express");var app=express();app.use(function(req,res,next){console.log("訪問之前");next(); },function(req,res){res.send("主頁"); });app.listen(8080);

  因此,在進(jìn)行路由匹配之前或再錄又要繼續(xù)向下執(zhí)行時(shí)想做個(gè)操作,那么應(yīng)用層中間件無疑是好的選擇。

?

2.路由中間件

路由級(jí)中間件和應(yīng)用級(jí)中間件類似,只不過他需要綁定express.Router();

var router = express.Router()

  在匹配路由時(shí),我們使用 router.use() 或 router.VERB() ,路由中間件結(jié)合多次callback可用于用戶登錄及用戶狀態(tài)檢測(cè)。

const express = require("express"); var app = express(); var router=express.Router();router.use("/",function(req,res,next){console.log("匹配前");next(); });router.use("/user",function(req,res,next){console.log("匹配地址:",req.originalUrl);next(); },function(req,res){res.send("用戶登錄"); });app.use("/",router);app.listen(8080);

  總之在檢測(cè)用戶登錄和引導(dǎo)用戶應(yīng)該訪問哪個(gè)頁面是,路由中間件絕對(duì)好用。

?

3.錯(cuò)誤處理中間件

顧名思義,它是指當(dāng)我們匹配不到路由時(shí)所執(zhí)行的操作。錯(cuò)誤處理中間件和其他中間件基本一樣,只不過其需要開發(fā)者提供4個(gè)自變量參數(shù)。

app.use((err, req, res, next) => {res.sendStatus(err.httpStatusCode).json(err); });

  一般情況下,我們把錯(cuò)誤處理放在最下面,這樣我們即可對(duì)錯(cuò)誤進(jìn)行集中處理。

const express=require("express");var app=express();app.get("/",function(req,res,next){const err=new Error('Not Found');res.send("主頁");next(err); });app.use("/user",function(err,req,res,next){console.log("用戶登錄");next(err); },function(req,res,next){res.send("用戶登錄");next(); });app.use(function(req,res){res.status(404).send("未找到指定頁面"); });app.listen(8080);

  

4.內(nèi)置中間件

從版本4.x開始,Express不再依賴Content,也就是說Express以前的內(nèi)置中間件作為單獨(dú)模塊,express.static是Express的唯一內(nèi)置中間件。

express.static(root, [options]);

  通過express.static我們可以指定要加載的靜態(tài)資源。root代表加載靜態(tài)資源的路徑,options作為可選參數(shù)擁有一下屬性:

屬性描述類型缺省值
dotfiles是否對(duì)外輸出文件名以點(diǎn)(.)開頭的文件。有效值包括“allow”、“deny”和“ignore”字符串“ignore”
etag啟用或禁用 etag 生成布爾true
extensions用于設(shè)置后備文件擴(kuò)展名。數(shù)組[]
index發(fā)送目錄索引文件。設(shè)置為 false 可禁用建立目錄索引。混合“index.html”
lastModified將 Last-Modified 的頭設(shè)置為操作系統(tǒng)上該文件的上次修改日期。有效值包括 true 或 false。布爾true
maxAge設(shè)置 Cache-Control 頭的 max-age 屬性(以毫秒或者 ms 格式中的字符串為單位)數(shù)字0
redirect當(dāng)路徑名是目錄時(shí)重定向到結(jié)尾的“/”。布爾?
setHeaders用于設(shè)置隨文件一起提供的 HTTP 頭的函數(shù)。函數(shù)true

以下示例將使用了 express.static 中間件,并且提供了一個(gè)詳細(xì)的’options’對(duì)象(作為示例):

var options = {dotfiles: 'ignore',etag: false,extensions: ['htm', 'html'],index: false,maxAge: '1d',redirect: false,setHeaders: function (res, path, stat) {res.set('x-timestamp', Date.now());} }app.use(express.static('public', options));

5.第三方中間件

形如之前我們的body-parser,采用引入外部模塊的方式來獲得更多的應(yīng)用操作。如后期的cookie和session。

var express = require('express'); var app = express(); var cookieParser = require('cookie-parser');

  以上就是關(guān)于express中間件類型,在實(shí)際項(xiàng)目中,中間件都是必不可少的,因此熟悉使用各種中間件會(huì)加快項(xiàng)目的開發(fā)效率。

轉(zhuǎn)載于:https://www.cnblogs.com/lpxj-blog/p/10713496.html

總結(jié)

以上是生活随笔為你收集整理的Express全系列教程之(五):Express的中间件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。