【Node.js】之Express五种类型中间件

本文详细介绍了Node.js中的Express框架的中间件概念,特点和功能。重点讲解了应用程序级中间件、路由器级中间件、错误处理中间件、内置中间件以及第三方中间件的使用和工作原理,帮助理解Express如何通过中间件实现web应用开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

Express介绍:

中间件概念:

中间件的特点:

中间件功能:

Express应用程序中的中间件类型: 

应用程序级中间件

路由器级中间件

错误处理中间件

内置中间件

第三方中间件 


Express介绍:

Express是一个基于Node.js平台的web应用开发框架,在Node.js基础之上扩展了web应用开发所需要的基础功能,从而使得我们开发Web应用更加方便、更加快捷。

中间件概念:

Express是一个自身功能极简,完全是路由中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件

浏览器向服务器发送一个请求后,服务器直接通过 request 。定位属性的方式得到过 request 携带过去的数据(有用户输入的数据和浏览器本身的数据信息)。这中间就一定有一个函数将这些数据分类做了处理,已经处理好了,最后让 request 对象调用使用,这个处理数据处理函数就是 中间件

中间件的特点:

  1. 封装了一些处理一个完整事件的功能函数。
  2. 非内置的中间件需要通过安装后,require到文件就可以运行。
  3. 封装了一些或许复杂但肯定是通用的功能。

中间件函数是可以访问请求对象 (req),响应对象(res)以及应用程序的请求 - 响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为的变量表示 next

中间件功能:

  1. 执行任何代码。
  2. 更改请求和响应对象。
  3. 结束请求 - 响应周期。
  4. 调用堆栈中的下一个中间件函数。

如果当前的中间件函数没有结束请求 - 响应周期,则必须调用next()以将控制传递给下一个中间件函数。否则,请求将被挂起。 

Express应用程序中的中间件类型: 

  1. 应用程序级中间件
  2. 路由器级中间件
  3. 错误处理中间件
  4. 内置中间件
  5. 第三方中间件

应用程序级中间件

通过使用和函数将应用程序级中间件绑定到app对象的实例,其中是中间件函数以小写形式处理的请求的HTTP方法(例如GET、POST或者PUT)。

简单使用:

const express = require('express');
let app = express()
app.use(function (req, res, next) {  
console.log('现在时间是:', Date.now())  
next()})
//没有装载路径的中间件功能,每次应用程序收到请求时都会执行该功能。

app.use('/user/:id', function (req, res, next) {  
console.log('Req:', req.method)  
next()})
//在 /user/:id 路径上安装的中间件功能。对/user/:id路径上的任何类型的HTTP请求执行该函数。

app.get('/user/:id', function (req, res, next) {  
res.send('USER')})
//该函数处理对/user/:id路径的GET请求。

app.use('/user/:id', function (req, res, next) {  
console.log('Req URL:', req.originalUrl)  
next()
}, function (req, res, next) {  
console.log('Req:', req.method)  
next()})
//使用挂载路径在挂载点加载一系列中间件函数的示例,
//它说明了一个中间件子堆栈,它将任何类型的HTTP请求的请求信息打印到/user/:id路径。

要从路由器中间件堆栈中跳过其余的中间件功能,请调用next("route")将控制权传递给下一个路由。

app.get('/user/:id', function (req, res, next) {  
// 如果用户ID为0,则跳到下一个路由  
if (req.params.id === '0') next('route')  
// 否则将控件传递给此堆栈中的下一个中间件函数  
else next()}, function (req, res, next) {  
// 返回数据信息  
res.send('1')})
// user/:id路径的处理程序,它发送一个特殊的响应app.get('/user/:id', function (req, res, next) {  
res.send('0')})

路由器级中间件

路由器级中间件的工作方式与应用程序级中间件的工作方式相同,但它绑定到的是一个实例express.Router()

const express = require('express');
const router = express.Router()
//创建路由实例

错误处理中间件

错误处理中间件需要四个参数(err, req, res, next)。必须提供四个参数以将其标识为错误处理中间件函数。即使不需要使用该next对象,也必须指定它以保持签名。该next对象将被解释为常规中间件,并且将无法处理错误。

app.use(function (err, req, res, next) {  
console.error(err.stack)  
res.status(500).send('错误!')})

内置中间件

Express具有以下内置中间件

  • express.static提供静态资源,如HTML文件,图像等。
  • express.json使用JSON有效负载解析传入的请求。
  • express.urlencodedURL编码的有效负载解析传入的请求

第三方中间件 

可以使用第三方中间件为Express应用程序添加功能

$ npm install cookie-parser
let express = require('express')
let app = express()
let cookieParser = require('cookie-parser')
// 加载cookie解析中间件app.use(cookieParser())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿昊在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值