前端需要去了解的nodejs知识(express路由详解)

简介: 在上一节中我们简单了解了express的一些基础用法,本文主要分析下express的核心功能路由的使用。

在上一节中我们简单了解了express的一些基础用法,本文主要分析下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还有个先后执行的规则所以只会执行前面定义的。

  • 按照定义的先后顺序进行匹配
  • 请求类型请求的PATH同时匹配成功,才会算是成功命中路由调用其对应的处理函数。
  • 字符串匹配是我们常用的路由规则,以/来定义这中规则比较简单此处不在介绍。
  • 字符串模版匹配
// 该路由匹配了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来实现,有兴趣可以去看看。

  • 路由控制转移:上面说路由的规则支持模糊匹配,同一个路由可能命中多个定义的路由,但是由于先后顺序规则只会执行第一个,那如果我们也想执行后面定义的路由咋办呢?此时回调函数的第三个参数next就起到了路由控制转移的功能
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模块化路由


Router路由是express4.x后加入的api,这个方便了我们项目的解藕,通过模块化路由我们可以将应用中不同的功能封装成一个个的模块。

使用方式

  • 定义相关的模块demo.js文件
  • 在模块demo.js文件中引入Router,并定义相关路由和回调
  • 模块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上的路由在功能上没有任何区别,都是处理中间件和路由。
  • 模块化路由Router只能已模块形式存在并不能在没有app路由下单独运行。
  • 简单的应用app就可以直接处理,复杂需要引入Router方便模块化和项目的后期扩展

总结


express中路由的处理是整个express的核心功能之一,这个也是express能快速开发项目的基础。要想用好express那掌握其路由规则是必不可少的学习。另外最后能去看下其源码的实现。

相关文章
|
27天前
|
JavaScript 前端开发 中间件
探索后端技术:Node.js与Express框架的完美融合
【10月更文挑战第7天】 在当今数字化时代,Web应用已成为日常生活不可或缺的一部分。本文将深入探讨后端技术的两大重要角色——Node.js和Express框架,分析它们如何通过其独特的特性和优势,为现代Web开发提供强大支持。我们将从Node.js的非阻塞I/O和事件驱动机制,到Express框架的简洁路由和中间件特性,全面解析它们的工作原理及应用场景。此外,本文还将分享一些实际开发中的小技巧,帮助你更有效地利用这些技术构建高效、可扩展的Web应用。无论你是刚入门的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和思考。
|
21天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
34 0
|
6天前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
13天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
36 1
|
2天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
7 0
|
27天前
|
JSON JavaScript 前端开发
Node.js Express 框架
10月更文挑战第7天
24 2
|
21天前
|
JavaScript 前端开发 应用服务中间件
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
20 0
|
21天前
|
前端开发 JavaScript 程序员
【从前端入门到全栈】Node.js 之核心概念
【从前端入门到全栈】Node.js 之核心概念
|
21天前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
21天前
|
Web App开发 JavaScript 前端开发
对于 前端 解释下 node.js的必要性
对于 前端 解释下 node.js的必要性
21 0