Express中间件(上)

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Express中间件(上)

next 函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。

1670071602705.jpg


Express中间件的demo


定义中间件函数

可以通过如下的方式,定义一个最简单的中间件函数:

// 常量 mw 所指向的,就是一个中间件函数
const mw = function (req, res, next) {
    console.log('这是一个简单的中间件函数');
    // 注意:在当前中间件的业务处理完毕后,必须调用 next() 函数
    // 表示把流转关系转交给下一个中间件或路由
    next()
}

全局生效的中间件

客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局生效的中间件。

通过调用 app.use(中间件函数),即可定义一个全局生效的中间件,示例代码如下:

const express = require('express')
const userRouter = require('./router')
const app = express()
// 常量 mw 所指向的,就是一个中间件函数
const mw = function (req, res, next) {
    console.log('这是一个简单的中间件函数');
    // 注意:在当前中间件的业务处理完毕后,必须调用 next() 函数
    // 表示把流转关系转交给下一个中间件或路由
    next()
}
// 全局生效的中间件
// 注意:注册中间件在路由前注册
app.use(mw)
// 使用 app.use() 注册路由模块
app.use(userRouter)
app.listen(8080, () => {
    console.log('server is running');
})

定义全局中间件的简化形式

const express = require('express')
const userRouter = require('./router')
const app = express()
// 全局生效的中间件
// 注意:注册中间件在路由前注册
app.use(function (req, res, next) {
    console.log('这是一个简单的中间件函数');
    // 注意:在当前中间件的业务处理完毕后,必须调用 next() 函数
    // 表示把流转关系转交给下一个中间件或路由
    next()
})
// 使用 app.use() 注册路由模块
app.use(userRouter)
app.listen(8080, () => {
    console.log('server is running');
})

中间件的作用

多个中间件之间,共享同一份 req 和 res。基于这样的特性,我们可以在上游的中间件中,统一为 req 或 res 对象添 加自定义的属性或方法,供下游的中间件或路由进行使用。

1670071632708.jpg

定义多个全局中间件

可以使用 app.use() 连续定义多个全局中间件。客户端请求到达服务器之后,会按照中间件定义的先后顺序依次进行 调用,示例代码如下:

app.use(function (req, res, next) {
    console.log('调用了第一个全局中间件');
    // 注意:在当前中间件的业务处理完毕后,必须调用 next() 函数
    // 表示把流转关系转交给下一个中间件或路由
    next()
})
app.use(function (req, res, next) {
    console.log('调用了第二个全局中间件');
    // 注意:在当前中间件的业务处理完毕后,必须调用 next() 函数
    // 表示把流转关系转交给下一个中间件或路由
    next()
})

局部生效的中间件

不使用 app.use() 定义的中间件,叫做局部生效的中间件,示例代码如下:

// 定义中间件函数 mw1
const mw1 = function (req, res, next) {
    console.log('这是中间件函数')
    next()
}
// mw1 这个中间件只在当前路由中生效, 这种用法属于"局部生效的中间件"
app.get('/', mw1, function (req, res) {
    res.send('home page.')
})
// mw1 这个中间件不会影响下面这个路由
app.get('/user', function (req, res) {
    res.send('User page.')
})

定义多个局部中间件

可以在路由中,通过如下两种等价的方式,使用多个局部中间件:

// 以下两种写法是完全等价的,可根据自己的喜好,选择任意一种方法进行使用
app.get('/', mw1, mw2, (req, res) => { res.send('Home page') })
app.get('/', [mw1, mw2], (req, res) => { res.send('Home page') })

了解中间件的5个使用注意事项

① 一定要在路由之前注册中间件

② 客户端发送过来的请求,可以连续调用多个中间件进行处理

③ 执行完中间件的业务代码之后,不要忘记调用 next() 函数

④ 为了防止代码逻辑混乱,调用 next() 函数后不要再写额外的代码

⑤ 连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象


中间件的分类


为了方便大家理解和记忆中间件的使用,Express 官方把常见的中间件用法,分成了 5 大类,分别是:

① 应用级别的中间件

② 路由级别的中间件

③ 错误级别的中间件

④ Express 内置的中间件

⑤ 第三方的中间件

应用级别的中间件

通过 app.use() 或 app.get() 或 app.post() ,绑定到 app 实例上的中间件,叫做应用级别的中间件,代码示例如下:

// 应用级别的中间件 (全局中间件)
app.use((req, res, next) => {
    next()
})
// 应用级别的中间件 (局部中间件)
app.get('/', mw1, (req, res) => {
    res.send('Home page')
})


相关文章
|
JSON 前端开发 中间件
axios基本使用,express中间件
axios基本使用,express中间件
|
JSON JavaScript 中间件
node.js中Express框架路由,中间件
node.js中Express框架路由,中间件
|
2月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
8月前
|
存储 缓存 JSON
玩转Express(二)登录态&中间件
玩转Express(二)登录态&中间件
|
7月前
|
JSON 中间件 API
中间件API示例(以Express.js为例)
【6月更文挑战第14天】
57 8
|
8月前
|
JavaScript 中间件 API
中间件应用Express.js(Node.js)
【5月更文挑战第3天】我们定义了一个名为 `logger` 的中间件函数。它接受请求对象、响应对象以及下一个中间件函数作为参数。当接收到请求时,它会打印出请求的 HTTP 方法和 URL,然后调用 `next()` 函数来将控制权传递给下一个中间件或路由处理器。我们使用 `app.use()` 方法将 `logger` 中间件添加到了应用级别的中间件堆栈中,这意味着它将对所有请求生效。
56 3
中间件应用Express.js(Node.js)
|
中间件
93 # 实现 express 错误处理中间件
93 # 实现 express 错误处理中间件
71 0
|
8月前
|
开发框架 JavaScript 中间件
深入探索Node.js的Express框架:使用与中间件详解
【4月更文挑战第30天】本文深入探讨了Node.js的Express框架,介绍了其作为Web开发的强大工具,主要聚焦于基本使用和中间件。Express是基于Node.js的Web应用框架,用于构建高效的应用和API。文章详细讲解了如何安装Express,创建简单应用,以及中间件的工作原理和应用,包括中间件的顺序、错误处理和挂载位置。此外,还提到了使用第三方中间件扩展功能。理解Express基础和中间件对于开发高质量Web应用至关重要。
|
8月前
|
Web App开发 JavaScript 前端开发
Express 框架的特点、使用方法以及相关的常用功能和中间件
Express 框架的特点、使用方法以及相关的常用功能和中间件
400 1
|
8月前
|
JavaScript 前端开发 中间件
Node.js—Express使用、Express 路由 、Express 中间件、托管静态资源、使用 Express 写接口、node.js链接sqlite数据库
Node.js—Express使用、Express 路由 、Express 中间件、托管静态资源、使用 Express 写接口、node.js链接sqlite数据库
267 0