中间件
在 Express 中,中间件(Middleware)是指一组函数,它们在请求到达路由处理器之前,或者响应返回给客户端之前,拦截和处理请求或响应的过程。
基本概念
中间件是函数,可以访问请求对象(req)、响应对象(res)以及请求-响应周期中的下一个中间件函数(next())。每个中间件函数的结构如下:
function (req, res, next) {
// 中间件的逻辑
}req:请求对象res:响应对象next():调用下一个中间件或路由处理器
中间件注册
全局中间件
全局中间件适用于所有路由和请求。
js
const express = require('express');
const app = express();
// 这是一个全局中间件
app.use((req, res, next) => {
console.log('请求到达!');
next(); // 继续执行下一个中间件或路由处理
});
// 你的路由处理
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});局部中间件
你也可以为某个特定的路由设置中间件。
js
const express = require('express');
const app = express();
// 仅对 /user 路由应用中间件
app.use('/user', (req, res, next) => {
console.log('访问了 /user 路由');
next();
});
app.get('/user', (req, res) => {
res.send('User Info');
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});中间件的顺序
Express 中间件是按顺序执行的,后面定义的中间件后执行。
next将控制权传递给下一个中间件或路由处理函数:如果中间件需要在处理后继续传递控制,必须调用 next()。
js
app.use((req, res, next) => {
console.log('第一个中间件');
next();
});
app.use((req, res, next) => {
console.log('第二个中间件');
next();
});
app.get('/', (req, res) => {
res.send('Hello, World!');
});js
第一个中间件
第二个中间件内置中间件
express.json()
解析 application/json 格式的请求体。
js
app.use(express.json());express.urlencoded()
解析 application/x-www-form-urlencoded 格式的请求体。
js
app.use(express.urlencoded({ extended: true }));express.static()
提供静态资源服务。
js
app.use(express.static('public'));express.static() 中间件会将指定目录中的文件公开供客户端访问。例如,访问 http://localhost:3000/images/logo.png 将返回 public/images/logo.png 文件。
