Skip to content

中间件

在 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 文件。