Express 中间件是 Express 框架的核心部分,它提供了一种在处理 HTTP 请求和响应时执行通用操作的方式。中间件可以在请求到达应用程序之前或响应返回客户端之后执行,并且可以访问请求对象、响应对象和应用程序的请求/响应循环中的下一个中间件函数。
中间件分为三类:内置中间件、路由中间件和错误处理中间件。内置中间件是指在 Express 应用程序中已经内置了的中间件,如 res.send()
、req.cookies
等。路由中间件是指在 Express 应用程序中通过 app.use()
或 app.METHOD()
注册的中间件,如 app.use(middleware)
。错误处理中间件是指在任何所需内容之后但在所有其他 app.use()
和路由调用之前必须调用的中间件,如 app.use(errorHandler)
。
下面我们来看几个例子:
- 使用内置中间件发送响应
可以使用内置中间件来发送响应。例如,我们可以使用 res.json()
中间件将 JSON 数据作为响应发送回去。这个中间件会将传入的对象序列化为 JSON 字符串并设置 Content-Type 头为 application/json。
const express = require('express');
const app = express();
// 使用 res.json() 中间件发送 JSON 响应
app.get('/', (req, res) => {
res.json({ message: 'Hello, world!' });
});
- 使用路由中间件验证用户身份
可以使用路由中间件来验证用户身份。例如,我们可以创建一个名为 authenticate
的中间件函数,该函数接收一个请求对象和一个响应对象作为参数,并检查请求头中的授权令牌是否有效。如果令牌无效,则向客户端发送一个带有错误消息的响应;否则,继续处理请求并发送响应。
function authenticate(req, res, next) {
const token = req.headers['authorization'];
if (!token || token !== 'mysecrettoken') {
res.status(401).send('Unauthorized');
return;
}
next();
}
const app = express();
app.get('/protected', authenticate, (req, res) => {
res.send('This is a protected page');
});
- 使用错误处理中间件处理异常情况
可以使用错误处理中间件来处理应用程序中出现的各种异常情况。例如,我们可以创建一个名为 errorHandler
的错误处理函数,该函数接收一个错误对象作为参数,并根据错误类型向客户端发送适当的响应。在这个例子中,我们只是简单地向客户端发送一条错误消息。
function errorHandler(err, req, res, next) {
console.error(err);
res.status(500).send('Something went wrong!');
}
const app = express();
app.use(errorHandler);