15 自定义中间件

在这一章节,我们将深入探讨如何在 Express.js 中创建和使用自定义中间件。掌握自定义中间件的技巧不仅能增强你对 Express.js 的理解,还能让你为特定需求定制应用程序的逻辑。

中间件概述

在 Express 中,中间件是一种函数,可以访问请求对象(req)、响应对象(res)和应用程序的请求-响应周期中的其他中间件。中间件主要用于执行操作,如执行请求数据的处理、验证用户身份、记录请求信息等。

中间件的基本结构

自定义中间件的定义相对简单。一个典型的中间件函数的结构如下:

1
2
3
4
5
6
7
function customMiddleware(req, res, next) {
// 处理请求
console.log("Request URL:", req.originalUrl);

// 必须调用 next() 来将控制权交给下一个中间件
next();
}

在上面的代码中,customMiddleware 是一个自定义中间件函数,next 是 Express 提供的函数,用于将控制权传递给下一个中间件。

创建并使用自定义中间件

现在,让我们来创建一个简单的自定义中间件,并将其应用到我们的 Express 应用中。

示例:请求时间戳中间件

我们将创建一个自定义中间件,它会在请求过程中记录当前的时间戳。

首先,创建一个新的 Express 应用:

1
2
3
const express = require('express');
const app = express();
const PORT = 3000;

然后,我们实现我们的自定义中间件:

1
2
3
4
function timestampMiddleware(req, res, next) {
req.requestTime = new Date().toISOString();
next();
}

接下来,使用 app.use() 方法传播这个中间件:

1
2
// 使用自定义中间件
app.use(timestampMiddleware);

然后,我们可以在路由处理程序中访问这个时间戳信息:

1
2
3
app.get('/', (req, res) => {
res.send(`请求时间: ${req.requestTime}`);
});

最后,启动服务器:

1
2
3
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});

代码综述

完整的代码示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const express = require('express');
const app = express();
const PORT = 3000;

// 自定义中间件,记录请求时间
function timestampMiddleware(req, res, next) {
req.requestTime = new Date().toISOString();
next();
}

// 使用自定义中间件
app.use(timestampMiddleware);

// 路由处理程序
app.get('/', (req, res) => {
res.send(`请求时间: ${req.requestTime}`);
});

// 启动服务器
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});

测试中间件

启动你上面的应用并在浏览器中访问 http://localhost:3000/,你将会看到类似于以下的输出:

1
请求时间: 2023-10-01T12:34:56.789Z

可以看到,我们的自定义中间件成功地在请求中添加了时间戳信息。

实际应用中的自定义中间件

自定义中间件在实际开发中非常有用,以下是一些常见的应用场景:

  • 请求验证:可以验证请求的用户身份,如 JWT 验证。
  • 请求优化:可以在处理请求之前进行数据转换或优化。
  • 日志记录:记录所有传入请求的详细信息,以便后期分析。
  • 错误处理:集中处理错误并向用户返回统一的错误响应。

以下是一个验证中间件的示例:

1
2
3
4
5
6
7
8
9
10
11
function authMiddleware(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(403).send('权限不足');
}
// 在这里验证 token 的逻辑
next();
}

// 在需要鉴权的路由中使用
app.use('/secure', authMiddleware);

结论

本节中,我们学习了如何创建和使用自定义中间件。中间件不仅能帮助我们简化代码结构,还能重用逻辑,让我们的应用更加模块化。在下一章节中,我们将深入探讨如何处理请求和响应,特别是处理 GET 请求的技巧。通过中间件与处理请求的结合,您会发现 Express.js 的强大与灵活。

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论