15 中间件与路由之使用中间件

在上一篇我们介绍了如何用 Express 框架创建第一个应用。这一篇,我们将深入了解 中间件 的概念,以及如何在路由中使用中间件。中间件在 Express 中是一个非常重要的部分,它为我们提供了处理请求和响应的强大功能。

什么是中间件?

在 Express 中,中间件是指那些可以处理请求对象(req)、响应对象(res)和下一个中间件函数的函数。中间件可以访问请求对象、响应对象以及终结请求-响应循环的功能。中间件可以执行以下任务:

  • 执行任何代码
  • 修改请求和响应对象
  • 结束请求-响应循环
  • 调用下一个中间件函数

中间件的使用语法如下:

1
2
3
4
app.use(function(req, res, next) {
// 你的处理代码
next(); // 调用下一个中间件
});

如何使用中间件

首先,我们需要在创建的 Express 应用中添加一些中间件。以下将通过一个简单的示例来展示如何定义和使用中间件。

示例:日志中间件

我们将创建一个日志中间件,记录每次请求的时间和 URL。

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;

// 日志中间件
const logger = (req, res, next) => {
console.log(`请求时间: ${new Date().toISOString()}, 请求路径: ${req.url}`);
next(); // 调用下一个中间件
};

// 使用中间件
app.use(logger);

// 创建根路由
app.get('/', (req, res) => {
res.send('欢迎来到首页');
});

// 启动服务
app.listen(port, () => {
console.log(`应用已在 http://localhost:${port} 运行`);
});

在这个例子中,我们定义了一个 logger 中间件,它会在每次请求时打印当前时间和请求的 URL。通过使用 app.use(logger),我们将这个中间件注册到应用中,这样每当有请求到达时,它都会被调用。

中间件的顺序

中间件的执行顺序是由它们被注册的顺序决定的。我们可以根据需要控制中间件的调用顺序。例如,您可能想在路由处理之前先进行身份验证中间件的检查。

1
2
3
4
5
6
7
8
9
10
11
12
13
const authMiddleware = (req, res, next) => {
// 假设我们有一些逻辑来验证用户身份
const authenticated = true; // 例子中假设用户已通过身份验证

if (authenticated) {
next(); // 用户已通过身份验证,继续处理请求
} else {
res.status(403).send('禁止访问'); // 用户未通过身份验证
}
};

// 使用身份验证中间件
app.use(authMiddleware);

在上述代码中,authMiddleware 用于处理身份验证逻辑。如果用户认证通过,则调用 next(),让控制权传递给下一个中间件或路由。如果认证失败,则返回状态码为 403 的响应。

路由中使用中间件

中间件也可以局部使用,仅在某个特定的路由中有效。例如:

1
2
3
4
5
6
7
8
9
10
// 创建一个特定路由的中间件
const specificLogger = (req, res, next) => {
console.log(`特定路由请求时间: ${new Date().toISOString()} ${req.url}`);
next();
};

// 在特定路由上使用中间件
app.get('/about', specificLogger, (req, res) => {
res.send('关于我们页面');
});

在上面的代码中,我们创建了一个 specificLogger 中间件,并将其应用于 /about 路由。这意味着只有当请求此特定路由时,中间件才会执行。

小结

在本节中,我们学习了什么是中间件、如何定义和使用中间件。中间件提供了一个非常灵活的机制来处理请求和响应,使得我们可以在请求处理流程中插入特定的功能。

在下一篇中,我们将继续讨论 中间件与路由,并重点介绍创建路由的具体步骤和实例。希望大家继续关注教程的进展!

15 中间件与路由之使用中间件

https://zglg.work/node-js-you-need/15/

作者

AI免费学习网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论