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)用其對應(yīng)的處理函數(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,這個方便了我們項目的解藕,通過模塊化路由我們可以將應(yīng)用中不同的功能封裝成一個個的模塊。
使用方式
- 定義相關(guān)的模塊demo.js文件
- 在模塊demo.js文件中引入Router,并定義相關(guān)路由和回調(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路由上,并加上相應(yīng)的前綴
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路由下單獨運行。
- 簡單的應(yīng)用app就可以直接處理,復雜需要引入Router方便模塊化和項目的后期擴展
總結(jié)
express中路由的處理是整個express的核心功能之一,這個也是express能快速開發(fā)項目的基礎(chǔ)。要想用好express那掌握其路由規(guī)則是必不可少的學習。另外最后能去看下其源碼的實現(xiàn)。
- 參考文檔1:Express 文檔(路由)
- 參考文檔2:Express 文檔
- 參考文檔3Express 實戰(zhàn)(五):路由
以上就是nodejs express路由匹配控制及Router模塊化使用詳解的詳細內(nèi)容,更多關(guān)于nodejs express路由匹配Router的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nodejs實現(xiàn)獲取當前url地址及url各種參數(shù)值
這篇文章主要介紹了nodejs實現(xiàn)獲取當前url地址及url各種參數(shù)值,本文直接給出代碼實例,需要的朋友可以參考下2015-06-06通過NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法
本文介紹了GRPC和協(xié)議緩沖區(qū)的基本概念,并展示了如何在NodeJS應(yīng)用程序中使用它們,GRPC是一個高性能RPC框架,協(xié)議緩沖區(qū)則用于定義服務(wù)和序列化消息,本文給大家介紹如何在NodeJS應(yīng)用程序中使用GRPC和協(xié)議緩沖區(qū),感興趣的朋友一起看看吧2024-10-10nodejs 中模擬實現(xiàn) emmiter 自定義事件
這篇文章主要介紹了Nodejs中自定義事件實例,比較簡單的一個例子,需要的朋友可以參考下。2016-02-02Node+Express搭建HTTPS服務(wù)的實現(xiàn)
最近開發(fā)需要搭建一個https的服務(wù),正好最近在用nodejs和express,本文章主要介紹了Node+Express搭建HTTPS服務(wù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-12-12Node.js 使用 gRPC從定義到實現(xiàn)過程詳解
gRPC是一個高性能、開源的遠程過程調(diào)用(RPC)框架,由 Google 開發(fā),它支持多種編程語言,旨在簡化和優(yōu)化分布式系統(tǒng)中的服務(wù)通信,本文給大家介紹Node.js 使用 gRPC從定義到實現(xiàn)過程,感興趣的朋友跟隨小編一起看看吧2024-07-07