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

nodejs?express路由匹配控制及Router模塊化使用詳解

 更新時間:2022年10月14日 10:11:19   作者:暴走的比卡丘  
這篇文章主要為大家介紹了nodejs?express路由匹配控制及Router模塊化使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

路由控制匹配

本文主要分析下express的核心功能路由的使用。

express路由的匹配規(guī)則:

  • 支持模糊匹配,同一個路由可能命中多個定義的路由
router.get("/user/*",(req,res,next)=>{
   console.log("====demo====")
})
router.get("/user/list",(req,res,next)=>{
   console.log("====demo====")
})

調(diào)用接口/user/list其實回同時匹配到定義的/user/*和/user/list兩個路由,但express還有個先后執(zhí)行的規(guī)則所以只會執(zhí)行前面定義的。

  • 按照定義的先后順序進行匹配
  • 請求類型請求的PATH同時匹配成功,才會算是成功命中路由調(diào)用其對應的處理函數(shù)。
  • 字符串匹配是我們常用的路由規(guī)則,以/來定義這中規(guī)則比較簡單此處不在介紹。
  • 字符串模版匹配
// 該路由匹配了1234和124
app.get('/12?34', function (req, res,next) {
  res.send('-----字符串模板匹配-----')
})
// 該路由匹配了`1234`、`12234`、`122234`等。
app.get('/12+34', function (req, res,next) {
  res.send('-----字符串模板匹配-----')
})
// 通配符*,表示所有字符串,該路由匹配了/12**所有路徑
app.get('/12*', function (req, res,next) {
  res.send('-----字符串模板匹配-----')
})

占位符的路由,在回調(diào)函數(shù)中我們可以通過req.params[占位符的key]來取傳入占位符位置的值。

//此路由將匹配到/user/**(任意值)的路由
app.get('/user/:id', function (req, res,next) {
  res.send('-----占位符-----',req.params.id)
})

注:占位符定義規(guī)則只能是大小寫字符數(shù)字和下劃線[A-Za-z0-9_]

  • 正則匹配:可以寫正則表達式來作為路由的匹配規(guī)則,正則表達雖然不易讀,但是非常適合來定義一些復雜的路由。
// 表示路由必須有user+數(shù)字+小寫字母組成
app.get(/user\/[0-9]\/[a-z]/, function (req, res) {
  res.send('/b/')
})

注:express的路由匹配規(guī)則原理使用Path-to-RegExp來實現(xiàn),有興趣可以去看看。

  • 路由控制轉(zhuǎn)移:上面說路由的規(guī)則支持模糊匹配,同一個路由可能命中多個定義的路由,但是由于先后順序規(guī)則只會執(zhí)行第一個,那如果我們也想執(zhí)行后面定義的路由咋辦呢?此時回調(diào)函數(shù)的第三個參數(shù)next就起到了路由控制轉(zhuǎn)移的功能
router.get("/user/*",(req,res,next)=>{
   console.log("demo1")
   next()
})
router.get("/user/list",(req,res,next)=>{
   console.log("demo2")
})

當請求/user/list時候回打?。篸emo1 和 demo2

Router模塊化路由

Router路由是express4.x后加入的api,這個方便了我們項目的解藕,通過模塊化路由我們可以將應用中不同的功能封裝成一個個的模塊。

使用方式

  • 定義相關的模塊demo.js文件
  • 在模塊demo.js文件中引入Router,并定義相關路由和回調(diào)
  • 模塊demo.js文件中導出router對象
//demo.js
let express = require('express');
let router = express.Router();
router.get("/user",(req,res,next)=>{
   console.log("====demo====")
})
module.exports = router
  • 入口文件引入模塊js文件,并作為中間件注入到app路由上,并加上相應的前綴
let express = require('express');
let app = express();
// 引入demo.js
let demoRoutes = require('./demo.js');
app.use('/demo',demoRoutes)
app.listen(3000);

對比app上的路由

  • 模塊化路由Router與app上的路由在功能上沒有任何區(qū)別,都是處理中間件和路由。
  • 模塊化路由Router只能已模塊形式存在并不能在沒有app路由下單獨運行。
  • 簡單的應用app就可以直接處理,復雜需要引入Router方便模塊化和項目的后期擴展

總結(jié)

express中路由的處理是整個express的核心功能之一,這個也是express能快速開發(fā)項目的基礎。要想用好express那掌握其路由規(guī)則是必不可少的學習。另外最后能去看下其源碼的實現(xiàn)。

以上就是nodejs express路由匹配控制及Router模塊化使用詳解的詳細內(nèi)容,更多關于nodejs express路由匹配Router的資料請關注腳本之家其它相關文章!

相關文章

  • node koa2 ssr項目搭建的方法步驟

    node koa2 ssr項目搭建的方法步驟

    這篇文章主要介紹了node koa2 ssr項目搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 實戰(zhàn)node靜態(tài)文件服務器的示例代碼

    實戰(zhàn)node靜態(tài)文件服務器的示例代碼

    本篇文章主要介紹了實戰(zhàn)node靜態(tài)文件服務器的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • node.js中的http.request方法使用說明

    node.js中的http.request方法使用說明

    這篇文章主要介紹了node.js中的http.request方法使用說明,本文介紹了http.request的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼需要的朋友可以參考下
    2014-12-12
  • nodejs使用Sequelize框架操作數(shù)據(jù)庫的實現(xiàn)

    nodejs使用Sequelize框架操作數(shù)據(jù)庫的實現(xiàn)

    這篇文章主要介紹了nodejs使用Sequelize框架操作數(shù)據(jù)庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Node.js學習教程之HTTP/2服務器推送【譯】

    Node.js學習教程之HTTP/2服務器推送【譯】

    這篇文章主要給大家介紹了關于Node.js學習教程之HTTP/2服務器推送的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • 詳解Node.js中的Async和Await函數(shù)

    詳解Node.js中的Async和Await函數(shù)

    這篇文章主要介紹了Node.js中的Async和Await函數(shù)的相關知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 從零學習node.js之mysql數(shù)據(jù)庫的操作(五)

    從零學習node.js之mysql數(shù)據(jù)庫的操作(五)

    因為接觸Node.JS已經(jīng)有一段時間了,最近粗略的研究了一下node.js操作數(shù)據(jù)庫的包,覺得node.js連接數(shù)據(jù)庫不錯。下面這篇文章主要給大家介紹了node.js之mysql數(shù)據(jù)庫操作的相關資料,需要的朋友可以參考下。
    2017-02-02
  • NodeJS和BootStrap分頁效果的實現(xiàn)代碼

    NodeJS和BootStrap分頁效果的實現(xiàn)代碼

    這篇文章主要介紹了NodeJS和BootStrap分頁效果的實現(xiàn)代碼的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 使用Node實現(xiàn)Git倉庫批量克隆的操作步驟

    使用Node實現(xiàn)Git倉庫批量克隆的操作步驟

    分享一個node腳本,通過調(diào)用gitee的OpenApi獲取自己的代碼倉庫列表,達到批量克隆項目的效果,文中通過代碼示例和圖文講解的非常詳細,感興趣的小伙伴可以參考閱讀一下
    2024-04-04
  • Node.js中的流(Stream)的作用詳解

    Node.js中的流(Stream)的作用詳解

    在 Node.js 中,stream模塊提供了用于實現(xiàn)流接口的 API,但是很多內(nèi)置模塊都提供了關于流的 API,所以通常不需要顯式的調(diào)用 stream 模塊來使用流,本文給大家介紹一下Node.js中的流(Stream)有什么作用,需要的朋友可以參考下
    2023-08-08

最新評論

普兰店市| 阿鲁科尔沁旗| 鄂托克前旗| 桐柏县| 泊头市| 金寨县| 双桥区| 司法| 筠连县| 白玉县| 璧山县| 通城县| 海原县| 阳原县| 涿州市| 工布江达县| 漳平市| 内丘县| 沧州市| 雷波县| 唐河县| 屏东市| 台湾省| 宜丰县| 阳城县| 洞口县| 和静县| 绵阳市| 克拉玛依市| 南开区| 汉中市| 海伦市| 桂阳县| 松原市| 澄迈县| 门头沟区| 平顶山市| 略阳县| 石城县| 榆社县| 容城县|