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

nodejs關(guān)于中間件解析

 更新時(shí)間:2022年12月03日 11:20:19   作者:石頭山_S  
這篇文章主要介紹了nodejs關(guān)于中間件解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

nodejs 中間件

今天我們來(lái)了解一下 nodejs 中間件,中間件可以說(shuō)是 node 中最重要也是最核心的地方。它最重要的思想便是 洋蔥模型 ,從外到內(nèi)依次執(zhí)行中間件。

說(shuō)了半天中間件到底有什么作用呢,在處理服務(wù)請(qǐng)求時(shí),我們要進(jìn)行很多細(xì)節(jié)的處理,比如解析請(qǐng)求體,報(bào)文報(bào)頭,設(shè)置 cookie 等等很多操作,如果每次訪問路由都要編寫這些繁瑣的代碼,將會(huì)造成代碼混亂,你可能連自己的業(yè)務(wù)邏輯代碼都找不到了。

但是有了中間件的存在,我們將那些固定功能的代碼封裝起來(lái),在每次訪問路由后自動(dòng)去執(zhí)行我們用到的所有中間件,我們只需要把注意力放在編寫我們的業(yè)務(wù)邏輯代碼便可。

由于大量中間件的支持,使用 node 開發(fā)變得十分便捷,高效,比如express , egg 這些成熟的框架。

中間件的編寫

說(shuō)了這么半天我們?nèi)绾螌懸粋€(gè)中間件呢,前后端交互最重要的就是兩個(gè)參數(shù) request 和 respond ,其次,每一個(gè)中間件執(zhí)行完畢應(yīng)該進(jìn)入下一個(gè)中間件,因此還需要一個(gè) next 參數(shù),用來(lái)啟動(dòng)下一個(gè)中間件。

let bodyParse = function(req, res, next){
? ? // 中間代碼不作解釋
? ? console.log(' 解析請(qǐng)求體');
? ? next()
}

中間件的使用

分析:我們將中間件保存在 stack 中,我們通過(guò) use 函數(shù)來(lái)注冊(cè)路由,同時(shí)為該路由注冊(cè)中間件,在 handleEvent 函數(shù)中啟動(dòng)中間件,并執(zhí)行我們的邏輯事件函數(shù)。便形成了一個(gè)簡(jiǎn)單的執(zhí)行流程,首先通過(guò)路由匹配到我們事先分配好的事件函數(shù),然后執(zhí)行其中我們注冊(cè)好的中間件,最后執(zhí)行我們的事件邏輯函數(shù),從請(qǐng)求到響應(yīng)便執(zhí)行完畢。

但是這樣有一個(gè)弊端,每一次路由都需要遍歷一次我們注冊(cè)的中間件,造成了不必要的浪費(fèi),這些相同的中間件只需要執(zhí)行一次便可。因此我們的代碼還需要改進(jìn)。

nodejs制作自定義中間件

對(duì)于Nodejs的中間件我想各位小伙伴都有所了解,下邊我就以制作一個(gè)自定義的處理表單數(shù)據(jù)的中間件為例,告訴大家如何自作一個(gè)屬于自己的自定義中間件。

1.創(chuàng)建一個(gè)util.js文件,用于封裝編寫自定義的表單數(shù)據(jù)處理中間件

// 導(dǎo)入querystring模塊(目的是用于將下方拼接好的查詢字符串轉(zhuǎn)換成對(duì)象)
const qs = require('querystring')
?
//創(chuàng)建中間件處理函數(shù)
function bodyParser(req, res, next) {
? let str = ''
? // 這個(gè)chunk就是每次獲取到的請(qǐng)求體的部分?jǐn)?shù)據(jù)
? req.on('data', (chunk) => {
? ? str += chunk
? })
?
? req.on('end', () => {
? ? const body = qs.parse(str)
? ? //這里將處理好的請(qǐng)求體數(shù)據(jù)掛載到req上
? ? // 就是為了讓后邊的路由可以通過(guò)req.body獲取到
? ? req.body = body
? ? next() //將流轉(zhuǎn)關(guān)系傳遞給后邊的中間件或路由
? })
}
?
//導(dǎo)出中間件函數(shù)
module.exports = bodyParser

2.創(chuàng)建一個(gè)app.js文件,用于創(chuàng)建服務(wù),注冊(cè)中間件

// 導(dǎo)入express模塊
const express = require('express')
?
// 創(chuàng)建服務(wù)器對(duì)象
const app = express()
?
// 1.導(dǎo)入自定義的中間件模塊
const bodyparser = require('./util.js')
?
// 2.注冊(cè)自定義的中間件 ?將其注冊(cè)為全局可用的中間件
?
app.use(bodyparser)
?
app.post('/test', (req, res) => {
? //由于全局注冊(cè)過(guò)自定義的處理請(qǐng)求體表單數(shù)據(jù)的中間件,所以這里可以直接獲取到請(qǐng)求體數(shù)據(jù)
? // 如果過(guò)沒有注冊(cè)過(guò)處理表單數(shù)據(jù)的中間件,這里req.body的返回值將會(huì)是undefined
? res.send(req.body)
})
?
//啟動(dòng)服務(wù)器
app.listen(80, () => {
? console.log('express server running at http://127.0.0.1');
})

3.效果測(cè)試

在集成終端中使用運(yùn)行app.js文件,啟動(dòng)服務(wù)

打開postman

  • 1.選擇post請(qǐng)求方式,在地址欄輸入http://127.0.0.1/test。
  • 2.選擇Body選項(xiàng)。
  • 3.選擇x-www-form-urlendcoded
  • 4.填寫請(qǐng)求體表單數(shù)據(jù)
  • 5.發(fā)送請(qǐng)求

由下圖可見,在請(qǐng)求發(fā)送后,服務(wù)器端返回的就是請(qǐng)求體對(duì)象,說(shuō)明自定義中間件生效

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • nodejs aes 加解密實(shí)例

    nodejs aes 加解密實(shí)例

    今天小編就為大家分享一篇nodejs aes 加解密實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • nodejs中實(shí)現(xiàn)路由功能

    nodejs中實(shí)現(xiàn)路由功能

    這篇文章主要介紹了nodejs中實(shí)現(xiàn)路由功能,顧名思義,路由指的就是我們要針對(duì)不同的URL有不同的處理方式,本文將教你在node.js中實(shí)現(xiàn)路由功能,需要的朋友可以參考下
    2014-12-12
  • 基于豆瓣API+Angular開發(fā)的web App

    基于豆瓣API+Angular開發(fā)的web App

    這篇文章主要介紹了基于豆瓣API+Angular開發(fā)的web App的方法和示例代碼,效果非常棒,有需要的小伙伴參考下
    2015-01-01
  • 前端node Session和JWT鑒權(quán)登錄示例詳解

    前端node Session和JWT鑒權(quán)登錄示例詳解

    關(guān)于前端鑒權(quán)登錄是比較常見的需求了,本文將從服務(wù)端渲染和前后端分離的不同角度下演示鑒權(quán),為大家介紹前端node Session和JWT鑒權(quán)登錄示例詳解
    2022-07-07
  • nodejs微信公眾號(hào)支付開發(fā)

    nodejs微信公眾號(hào)支付開發(fā)

    這篇文章主要為大家詳細(xì)介紹了nodejs微信公眾號(hào)支付開發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • node.js將MongoDB數(shù)據(jù)同步到MySQL的步驟

    node.js將MongoDB數(shù)據(jù)同步到MySQL的步驟

    這篇文章主要給大家介紹了關(guān)于node.js將MongoDB數(shù)據(jù)同步到MySQL的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Node.js實(shí)現(xiàn)修改文件字符集功能的具體過(guò)程

    Node.js實(shí)現(xiàn)修改文件字符集功能的具體過(guò)程

    在日常生活、工作中,我們經(jīng)常會(huì)遇到需要處理不同編碼格式的文件,有時(shí),在嘗試打開這些文件時(shí)會(huì)遇到亂碼,原因通常是文件的編碼與我們使用的文本編輯器或編程語(yǔ)言的默認(rèn)編碼不匹配,這篇文章將介紹Node.js修改文件字符集的實(shí)現(xiàn)思路和具體實(shí)現(xiàn)過(guò)程
    2024-08-08
  • 詳解node.js平臺(tái)下Express的session與cookie模塊包的配置

    詳解node.js平臺(tái)下Express的session與cookie模塊包的配置

    本篇文章主要介紹了詳解node.js平臺(tái)下Express的session與cookie模塊包的配置,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • NodeJS測(cè)試框架mocha入門教程

    NodeJS測(cè)試框架mocha入門教程

    本文給大家簡(jiǎn)單介紹了NodeJS里最常用的測(cè)試框架--mocha的安裝以及簡(jiǎn)單的使用方法,支持直接在browser上跑Javascript代碼測(cè)試,這里推薦給大家
    2017-03-03
  • Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程

    Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程

    本文主要介紹了Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評(píng)論

东方市| 南溪县| 汨罗市| 金溪县| 长沙市| 万盛区| 鄂托克前旗| 若羌县| 同江市| 调兵山市| 福鼎市| 措美县| 丹棱县| 南澳县| 兰考县| 泰州市| 桦川县| 麟游县| 罗甸县| 安徽省| 藁城市| 宾阳县| 伊金霍洛旗| 株洲市| 宁晋县| 百色市| 佛教| 理塘县| 庆安县| 吐鲁番市| 汉阴县| 竹溪县| 佛教| 柳州市| 喀什市| 德保县| 旬阳县| 石家庄市| 景德镇市| 洪洞县| 呼玛县|