老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

express.js框架中間件的示例分析-創新互聯

這篇文章給大家分享的是有關express.js框架中間件的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創新互聯是一家集網站建設,舞陽企業網站建設,舞陽品牌網站建設,網站定制,舞陽網站建設報價,網絡營銷,網絡優化,舞陽網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

_express.js_作為_Node.js_的老牌框架,是現有框架中最全面的。然而在學習express除了那些api之外,對于框架最重要的就是__中間件__這個概念了。如果理解了,就可以把這個框架玩活了,項目開發肯定會更加順利,而且還可以開發很多額外的功能,甚至中間件擴展開發。

但是就這么一個東西,是很多學習node.js的小萌新們就算寫出一個博客項目,都不知道它到底有啥作用。我當時在理解的時候也花了不少功夫,趁著沒有啥工作,給各位學習express.js的一點點我的指導意見。當然,這里面可能也有koa2和egg的忠實粉絲,但其實所有node框架貌似都有這個概念,所以我用express舉例子,希望各位將就一下哈,應該都是可以看得懂的。

首先我先來一波官方的解釋:

express.js框架中間件的示例分析

好吧,被這些英語嚇到了,來一波譯文:

[中間件函數是可以訪問請求對象(req)、響應對象(res)和應用程序請求響應周期中的下一個函數的函數。下一個函數是Express路由器中的一個函數,當調用該函數時,它執行當前中間件之后的中間件。

中間件功能可以執行以下任務:

  • 執行任何代碼

  • 對請求和響應對象進行更改。

  • 結束請求響應周期。

  • 調用堆棧中的下一個中間件。

終于知道當初的我為毛剛開始理解的時候很困難了,說實在的看得我真的有懵的。幸好,我還是從這個坑爬出來了,我來拉你們一把了。首先我們不去深究概念,直接上一個代碼塊。

express.js框架中間件的示例分析

如果我們啟動服務,訪問'/'路由,會返回"這是一個根路由",訪問router1路由就會得到這是一個"這是一個router1路由的"的信息。這看起來是一個很簡單的路由查詢,我們理一下過程,這個請求是如何訪問到這個路由的呢。

一般來說,一個express框架的項目會寫入很多路由,但各位要注意的是,這個請求并不是直接定位到這個路由的,而是一個從上至下匹配的一個過程。

有點亂?沒關系我們看圖

express.js框架中間件的示例分析

我們看到這幅圖,有一個箭頭,從上到下的。什么意思呢,如果用戶發了一個這樣的請求

GET '/router7'

那么他會從第一個開始一個一個去匹配,知道發現有一個路由名和請求方法都一致的路由,就立馬執行里面的代碼,并且返回一段文字"這是一個router7路由"。這都很好理解,那么現在我有一個需求,就是不管訪問任何一個路由,我都要知道這個訪問者的ip地址和訪問的目標路由打印出來,生產訪問日志。那么怎么做了。

我們分析一波,這段程序是所有的請求都要執行的,如果按照執行順序的說法,那么這段程序是應該放到所有路由的最前面的,也就是說這段程序是所有路由要經過的一段程序,也就是我們所說的中間件。好的,廢話不多說,上代碼

const fs = require('fs')
const log = (req,res) => {
  const ip = req.ip,
     route = req.route.path
  const log = `ip:${ip} path:${route}`
   fs.writeFileSync(__dirname + '/log',log)
}

比如現在我有一個log函數,它專門用來記錄訪問日志的。如何所有的都一起執行了,我們加一段這樣的代碼

app.use(log)

它加在所有代碼的最上面,但是不是加上就完事了,還必須在log函數里面再加一段代碼,不然當程序執行到里面之后就出不去了,什么代碼了。我們重寫log函數

const log = (req,res,next) => {
  const ip = req.ip,
     route = req.route.path
  const log = `ip:${ip} path:${route}`
   fs.writeFileSync(__dirname + '/log',log)
   next()
}

大家有沒有看見那個next,它有什么作用了。前面我們提到,它其實就是一個過渡者,主要的作用其實就是經過之后,要繼續往下面執行,還是就此終止返回結果。

說的簡單一點,就是我們一個http請求,到達我們的node服務器之后,要經歷的過程,而每經過一個程序塊,就是個中間件,每一個中間件只要有next就會傳遞到下一個中間件里面,直到服務器res響應結果,整個路由就此結束。

我們整合一下代碼。并且精簡一下,也跑一遍程序

const express = require('express')
const app = express()

const log = (req,res,next) => {
  const ip = req.ip,
     route = req.route.path
  const log = `ip:${ip} path:${route}`
   fs.writeFileSync(__dirname + '/log',log)
   next()
}

app.use(log)//任何請求都會經過這個log中間件 

app.get('/', (req, res) => {
  console.log(req.route.stack)
  res.send('這是一個根路由!')
})

app.get('/router1', (req, res) => {
  res.send('這是一個router1路由!')
})
app.get('/router2', (req, res) => {
  res.send('這是一個router2路由!')
})


app.listen(3000, () => {
  console.log('app listening on port 3000!')
})
GET '/router2' //打印日志,并且返回結果

這就是一個簡單的中間件解釋了。大家也可以回去看看你原來寫過的代碼,是否對之前的use這個玩意有點啟發了?

感謝各位的閱讀!關于“express.js框架中間件的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


網站名稱:express.js框架中間件的示例分析-創新互聯
鏈接地址:http://www.xueling.net.cn/article/dcjegd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 成人美女黄网站色大免费的 | 国产亚洲精品久久网站 | 午夜私人视频 | 深夜免费在线观看 | 国产精品久久欧美久久一区 | 凤隐天下60集全免费播放在线观看 | 国产一级a在线观看 | 四虎影城库 | 久久久乱码精品亚洲日韩mv | 精品国产不卡一区二区三区 | 国产欧美久久久精品二区仙踪林 | 午夜精品久久久久久久99热 | 欧美同性gv片在线观看 | 日本国产一级片 | 久久91亚洲精品中文字幕奶水 | 欧美日韩综合一区二区在线观看视频 | 黄色av一级片 | 91成人免费在线观看 | 国产无遮挡又爽又刺激的视频老师 | 天天操好逼 | 国产美女无遮挡裸色视频 | 无码色偷偷亚洲国内自拍 | 国产精品三区在线观看 | 免费黄篇| 99re6热在线精品 | 国产10000部拍拍拍免费视频 | 神马老子影院午夜观看网站 | 日本激情视频在线播放 | 中文字幕在线观看国产推理片 | 亚a洲v中文字幕2023 | 一区二区三区精密机械公司 | 国产精品自在拍一区二区不卡 | 热久久网站 | 综合av在线| 一区二区三区四区五区精品 | 日本一卡二卡3卡四卡网站精品 | 日日日噜噜噜 | 美女mm131爽爽爽作爱 | 久操免费福利视频 | 97色涩| 国产成人精品在线 |