本文主要分析下express的核心功能路由的使用。
express路由的匹配规则:
router.get("/user/*",(req,res,next)=>{ console.log("====demo====") }) router.get("/user/list",(req,res,next)=>{ console.log("====demo====") })
调用接口/user/list其实回同时匹配到定义的/user/*和/user/list两个路由,但express还有个先后执行的规则所以只会执行前面定义的。
// 该路由匹配了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('-----字符串模板匹配-----') })
占位符的路由,在回调函数中我们可以通过req.params[占位符的key]来取传入占位符位置的值。
//此路由将匹配到/user/**(任意值)的路由 app.get('/user/:id', function (req, res,next) { res.send('-----占位符-----',req.params.id) })
注:占位符定义规则只能是大小写字符数字和下划线[A-Za-z0-9_]
// 表示路由必须有user+数字+小写字母组成 app.get(/user\/[0-9]\/[a-z]/, function (req, res) { res.send('/b/') })
注:express的路由匹配规则原理使用Path-to-RegExp来实现,有兴趣可以去看看。
router.get("/user/*",(req,res,next)=>{ console.log("demo1") next() }) router.get("/user/list",(req,res,next)=>{ console.log("demo2") })
当请求/user/list时候回打印:demo1 和 demo2
Router路由是express4.x后加入的api,这个方便了我们项目的解藕,通过模块化路由我们可以将应用中不同的功能封装成一个个的模块。
//demo.js let express = require('express'); let router = express.Router(); router.get("/user",(req,res,next)=>{ console.log("====demo====") }) module.exports = router
let express = require('express'); let app = express(); // 引入demo.js let demoRoutes = require('./demo.js'); app.use('/demo',demoRoutes) app.listen(3000);
express中路由的处理是整个express的核心功能之一,这个也是express能快速开发项目的基础。要想用好express那掌握其路由规则是必不可少的学习。另外最后能去看下其源码的实现。