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

nodejs?express實(shí)現(xiàn)中間件

 更新時(shí)間:2022年10月14日 10:42:21   作者:南方小菜  
這篇文章主要為大家介紹了nodejs?express實(shí)現(xiàn)中間件實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

先看應(yīng)用

應(yīng)用規(guī)則:

  • express 中 use 的第一個(gè)參數(shù)是匹配路徑 不傳相當(dāng)于"/"
  • 中間件匹配機(jī)制是惰性匹配,即匹配路徑為/a的中間件,訪問/aa時(shí)同樣會(huì)被執(zhí)行(這也意味著不傳匹配路徑時(shí)即所有請(qǐng)求都會(huì)應(yīng)用此中間件)
const express = require("./express");
const app = express();
// 第一個(gè)參數(shù)是匹配路徑 不傳相當(dāng)于"/"
app.use(function (req, res, next) {
  req.a = 1;
  next();
});
app.use("/", function (req, res, next) {
  req.a++;
  next();
});
app.get("/", function (req, res, next) {
  res.end(req.a + "");
});
app.use("/a", function (req, res, next) {
  req.a++;
  next();
});
app.get("/a", function (req, res, next) {
  res.end(req.a + "");
});
app.listen(3000);

實(shí)現(xiàn)思路

結(jié)合之前的路由實(shí)現(xiàn),其實(shí)中間件就是【沒有路由表】的 Layer,我們只需要

  • 訂閱監(jiān)聽時(shí)做下對(duì)“不傳匹配路徑”等情況的處理
  • 請(qǐng)求發(fā)布時(shí)根據(jù)“是否具有路由表route屬性”進(jìn)行判斷從而對(duì)中間件區(qū)分處理

如此即可

具體實(shí)現(xiàn)

訂閱監(jiān)聽時(shí)做下對(duì)“不傳匹配路徑”等情況的處理

定義use方法

Router.prototype.use = function (path, ...handlers) {
  if (!handlers[0]) {
    // 只傳遞了一個(gè)函數(shù)
    handlers.push(path); // app.use(function(){})  app.use()
    path = "/";
  }
  handlers.forEach((handler) => {
    let layer = new Layer(path, handler);
    layer.route = undefined; // 不寫也是 undefined , 主要告訴你 中間件沒有 route
    this.stack.push(layer);
  });
};

請(qǐng)求發(fā)布時(shí)根據(jù)“是否具有路由表route屬性”進(jìn)行判斷從而對(duì)中間件區(qū)分處理

改寫handle方法

Router.prototype.handle = function (req, res, done) {
  let { pathname } = url.parse(req.url);
  let method = req.method.toLowerCase();
  let idx = 0;
  const next = (err) => {
    // 中間件 和內(nèi)部的 next 方法 出錯(cuò)都會(huì)走這個(gè) next
    if (idx >= this.stack.length) return done(); // 路由處理不了 傳遞給應(yīng)用層
    let layer = this.stack[idx++];
    // 無論是路由還是中間件 前提是路徑必須匹配
    if (layer.match(pathname)) {
      // match 還沒有更改
      if (!layer.route) {
        // 沒有說明是中間件   注意 此處就是對(duì)中間件的區(qū)分處理
        layer.handle_request(req, res, next); // 直接執(zhí)行中間件函數(shù)
      } else {
        // 路由必須匹配方法
        if (layer.route.methods[method]) {
          // 這個(gè) next 可以讓路由層掃描下一個(gè) layer
          layer.handle_request(req, res, next); // route.dispatch
        } else {
          next();
        }
      }
    } else {
      next();
    }
  };
  next(); // 請(qǐng)求來了取出第一個(gè)執(zhí)行
};

總結(jié)流程

以上就是nodejs express實(shí)現(xiàn)中間件的詳細(xì)內(nèi)容,更多關(guān)于nodejs express中間件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Kubernetes Node刪除鏡像的實(shí)現(xiàn)步驟

    Kubernetes Node刪除鏡像的實(shí)現(xiàn)步驟

    本文介紹了在Kubernetes集群中如何刪除節(jié)點(diǎn)上的鏡像,包括連接節(jié)點(diǎn)、查看鏡像列表、使用Docker命令刪除鏡像以及驗(yàn)證刪除結(jié)果的步驟,感興趣的可以了解一下
    2024-09-09
  • Node.js文件系統(tǒng)fs擴(kuò)展fs-extra說明

    Node.js文件系統(tǒng)fs擴(kuò)展fs-extra說明

    這篇文章主要介紹了Node.js文件系統(tǒng)fs擴(kuò)展fs-extra說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 使用Node.js制作圖片上傳服務(wù)的詳細(xì)教程

    使用Node.js制作圖片上傳服務(wù)的詳細(xì)教程

    在現(xiàn)代 Web 應(yīng)用開發(fā)中,圖片上傳是一項(xiàng)常見且重要的功能,借助 Node.js 強(qiáng)大的生態(tài)系統(tǒng),我們可以輕松搭建高效的圖片上傳服務(wù),本文將深入探討如何使用 Node.js 構(gòu)建一個(gè)功能完備的圖片上傳服務(wù),需要的朋友可以參考下
    2025-04-04
  • Node.js中常規(guī)的文件操作總結(jié)

    Node.js中常規(guī)的文件操作總結(jié)

    關(guān)于Node.js中文件的常規(guī)操作,主要的就是fs這個(gè)模塊。對(duì)于node.js中fs模塊提供的API很多,但是其所有的方法均有同步和異步的形式。那么下面這篇文章我們就來詳細(xì)介紹下關(guān)于Node.js中文件的常規(guī)操作,有需要的朋友們可以參考借鑒。
    2016-10-10
  • 詳解使用PM2管理nodejs進(jìn)程

    詳解使用PM2管理nodejs進(jìn)程

    本篇文章主要介紹了詳解使用PM2管理nodejs進(jìn)程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

    Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析

    這篇文章主要為大家介紹了Node.js?連接?MySql?統(tǒng)計(jì)組件屬性的使用情況解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 基于NodeJS開發(fā)釘釘回調(diào)接口實(shí)現(xiàn)AES-CBC加解密

    基于NodeJS開發(fā)釘釘回調(diào)接口實(shí)現(xiàn)AES-CBC加解密

    這篇文章主要介紹了基于NodeJS開發(fā)釘釘回調(diào)接口 實(shí)現(xiàn)AES-CBC加解密,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 詳解如何使用Node.js編寫命令工具——以vue-cli為例

    詳解如何使用Node.js編寫命令工具——以vue-cli為例

    本篇文章主要介紹了如何使用Node.js編寫命令工具——以vue-cli為例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • nodejs基于express實(shí)現(xiàn)文件上傳的方法

    nodejs基于express實(shí)現(xiàn)文件上傳的方法

    這篇文章主要介紹了nodejs基于express實(shí)現(xiàn)文件上傳的方法,結(jié)合實(shí)例形式分析了nodejs基于express框架實(shí)現(xiàn)文件上傳功能的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • node使用require?mkdirp創(chuàng)建文件夾示例

    node使用require?mkdirp創(chuàng)建文件夾示例

    這篇文章主要為大家介紹了node使用require?mkdirp創(chuàng)建文件夾示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

宝坻区| 宝清县| 沾化县| 贵德县| 磴口县| 万年县| 会宁县| 黑山县| 怀仁县| 大洼县| 任丘市| 纳雍县| 商城县| 大石桥市| 醴陵市| 剑川县| 湖北省| 枣强县| 绥宁县| 乌兰浩特市| 蓝田县| 修武县| 邳州市| 揭西县| 济阳县| 岑溪市| 乌兰县| 桂阳县| 孙吴县| 西华县| 南川市| 沈阳市| 土默特右旗| 瓦房店市| 达日县| 陵川县| 本溪市| 咸丰县| 鄂伦春自治旗| 凤冈县| 绵阳市|