最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端需知nodejs?express中間件使用及定義詳解

 更新時(shí)間:2022年10月19日 09:19:04   作者:暴走的比卡丘  
這篇文章主要為大家介紹了前端需知nodejs?express中間件使用及定義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在上一節(jié)中我們簡(jiǎn)單了解了express的路由,本文主要分析下express的另一個(gè)核心功能中間件的使用。路由是express整個(gè)框架能有如今廣泛使用和發(fā)展的基礎(chǔ),那中間件就是其發(fā)展的養(yǎng)分。正是express豐富的中間件才節(jié)省了我們大量的開發(fā)時(shí)間。

中間件的定義

對(duì)于express來說,中間件其實(shí)就是一個(gè)規(guī)定了入?yún)⒑统鰠⒌腏avaScript函數(shù),這個(gè)函數(shù)可以處理請(qǐng)求request和返回response相關(guān)的參數(shù),其功能如下:

  • 執(zhí)行任何代碼。
  • 處理請(qǐng)求和返回對(duì)象并返回新的。
  • 結(jié)束本次請(qǐng)求。
  • 調(diào)用next函數(shù)執(zhí)行下一個(gè)中間件。 定義中間件的示例如下:
 //處理請(qǐng)求對(duì)象的:請(qǐng)求參數(shù)重插入個(gè)參數(shù)
const myMiddleware = function (req, res, next) {
  console.log('this is a middleware')
  req.requestTime = Date.now()
  next()
}

可配置的中間件,目前這種中間件在我們實(shí)際應(yīng)用中比較多,比如經(jīng)典expressJWT bodyParser中間件

module.exports = function (options) {
  return function (req, res, next) {
    // 根據(jù)傳入的參數(shù)執(zhí)行一些操作
    next()
  }
}

中間件的使用

  • 中間件注冊(cè):使用app.use或app.METHOD進(jìn)行中間件注冊(cè)。
  • 中間按使用類型可以分為以下幾種:
    • 常規(guī)型:應(yīng)用層中間件、路由層中間件、內(nèi)置中間件、第三方中間件
    • 錯(cuò)誤處理:錯(cuò)誤處理中間件

  • 中間件整個(gè)執(zhí)行流程圖大概如上圖:注冊(cè)中間件和路由=》生成路由與中間件的映射=》客戶端請(qǐng)求=》執(zhí)行應(yīng)用層中間件=》匹配路由=》執(zhí)行異常中間件或路由映射的中間件,內(nèi)置中間件和第三方中間件的執(zhí)行流程根據(jù)其所定義的位置來執(zhí)行。
  • 應(yīng)用層中間件:使用 app.use() 和 app.METHOD() 函數(shù)將應(yīng)用層中間件綁定到應(yīng)用程序?qū)ο蟮膶?shí)例,一般寫在應(yīng)用最前面
var app = express();
app.use(function (req, res, next) {
  ******
  next();
});
  • 路由器層中間件:路由層中間件和應(yīng)用層類似,主要差別是路由中間件綁定的是express.Router()上。在復(fù)雜的項(xiàng)目中拆分路由時(shí)候常用
let express = require('express');
let router = express.Router();
router.post('/download/**/', function (req, res, next) {
    ******
});
  • 內(nèi)置中間件:自 V4.x 起,Express 不再依賴于 Connect。除 express.static 外,先前 Express 隨附的所有中間件函數(shù)現(xiàn)在以單獨(dú)模塊的形式提供。請(qǐng)查看中間件函數(shù)的列表
const express = require('express');
const app = express();
app.use(express.urlencoded({extended: false}));
  • 第三方中間件:這一種中間件是我們使用最多的中間件,用于增加和擴(kuò)展路由器的功能。使用一般是npm install安裝=》引入=》使用。如下:morgan是一個(gè)開源的express日志處理中間件
const morgan = require('morgan')
app.use(morgan('short'));
  • 錯(cuò)誤處理中間件:此種中間件和其他幾種的最大不同是函數(shù)中采用了四個(gè)變量,第一個(gè)變量是錯(cuò)誤信息的返回。在項(xiàng)目的最后我們經(jīng)常會(huì)加上如下缺省錯(cuò)誤處理,用于捕獲程序異常:
app.use((err, req, res, next) => {
  if (res.headersSent) {
    return next(err);
  }
  res.status(500);
  res.render('error', { error: err });
});

總結(jié)

express中間件的思想不緊緊方便了開發(fā),這種設(shè)計(jì)也是我們系統(tǒng)高內(nèi)聚低耦合多思想實(shí)踐之一。在我們?nèi)粘5臉I(yè)務(wù)開發(fā)中也可以參照這種設(shè)計(jì)來實(shí)現(xiàn)需求。

以上就是前端需知nodejs express中間件使用及定義詳解的詳細(xì)內(nèi)容,更多關(guān)于前端nodejs express中間件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

金塔县| 通城县| 方正县| 含山县| 望都县| 鲁甸县| 红安县| 五大连池市| 天全县| 济源市| 安庆市| 东辽县| 和静县| 枣阳市| 垦利县| 中宁县| 汶上县| 沾益县| 子长县| 杭锦后旗| 清镇市| 千阳县| 海门市| 宜昌市| 德格县| 湄潭县| 花垣县| 闽侯县| 甘孜县| 邹城市| 柳江县| 云浮市| 洪洞县| 晋宁县| 铁岭市| 介休市| 苍溪县| 南乐县| 峨边| 平和县| 柏乡县|