11 自定义中间件的创建

在 Node.js 后端开发中,中间件 是处理请求和响应的重要组成部分。它们可以用于执行各种任务,例如处理请求体、添加额外的功能或修改请求/响应对象。本篇文章将深入探讨如何创建自定义中间件,以便让你的 Express 应用更加灵活和可扩展。

中间件概述

回顾一下,在上一篇中,我们介绍了 Express 框架中间件 的基本概念。中间件是可以访问请求对象(req)、响应对象(res)和请求处理链中下一个中间件的方法(next)的函数。通过使用中间件,我们可以在请求处理的不同阶段插入特定的逻辑。

中间件的基本结构

基本的中间件函数结构如下:

1
2
3
4
function middleware(req, res, next) {
// 处理请求
next(); // 调用下一个中间件
}

创建自定义中间件

1. 日志中间件

日志中间件是一个简单而有用的示例,它记录每次请求的基本信息。下面的代码展示了如何实现一个请求日志中间件。

1
2
3
4
5
function requestLogger(req, res, next) {
const currentTime = new Date().toISOString();
console.log(`[${currentTime}] ${req.method} - ${req.url}`);
next(); // 继续往下处理请求
}

接下来,我们需要将这个中间件添加到我们的 Express 应用中:

1
2
3
4
5
6
7
8
9
10
11
12
const express = require('express');
const app = express();

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

app.get('/', (req, res) => {
res.send('Hello World!');
});

app.listen(3000, () => {
console.log('Server is running on port 3000');
});

在上述代码中:

  • 我们使用 app.use(requestLogger) 将日志中间件添加到应用中。
  • 每当有请求到达时,日志中间件会记录请求的时间、方法和 URL。

2. 身份验证中间件

另一个常见的自定义中间件是身份验证中间件,它通常用于保护敏感路由。以下是一个简单的身份验证中间件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function authMiddleware(req, res, next) {
const token = req.headers['authorization'];

if (token) {
// 这里可以添加验证逻辑,比如解码 JWT
next(); // 认证通过,继续处理请求
} else {
res.status(401).send('Unauthorized'); // 认证失败
}
}

// 保护一个路由
app.get('/protected', authMiddleware, (req, res) => {
res.send('This is a protected route');
});

在这个示例中:

  • 我们检查请求头中的 authorization 字段。
  • 如果存在令牌,调用 next() 继续处理请求;否则,返回 401 Unauthorized 响应。

3. 错误处理中间件

创建错误处理中的间接也是一个重要方面。错误处理中的间接需要一个四个参数的函数,示例代码如下:

1
2
3
4
5
6
7
function errorHandler(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something went wrong!');
}

// 使用错误处理中的间接
app.use(errorHandler);

在上面的代码中:

  • 我们定义了一个错误处理函数 errorHandler
  • 该函数接收 err, req, res, 和 next 参数。
  • 调用 next(err) 可以将错误传递给下一错误处理器。

自定义中间件的最佳实践

在创建自定义中间件时,遵循一些最佳实践能够增加你的代码的可维护性与可读性:

  1. 单一职责原则:确保每个中间件只负责一个方面的任务。例如,日志、身份验证和错误处理应该各自独立的中间件。

  2. 错误处理:确保在可能会出错的路径中调用 next(err),以便留有足够的空间供后续处理。

  3. 性能考虑:对于经常发生的请求,确保中间件执行效率高,避免不必要的性能消耗。

结语

通过这篇文章,我们学习了如何创建和使用自定义中间件。自定义中间件使得我们的应用更加灵活与模块化。接下来,在下一篇文章中,我们将深入探讨路由管理与参数处理,这将进一步提高你对 Express 框架的理解与应用能力。

继续关注我们的系列教程,探索更多 Node.js 后端开发的进阶技巧!

11 自定义中间件的创建

https://zglg.work/nodejs-backend-one/11/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论