# 中间件机制

URL: https://caijiao.org/express/chapter2/1-middleware
Source: docs/express/chapter2/1-middleware.md
Description: 本章节介绍 Express 中间件机制，讲解中间件的概念、类型及其在请求处理流程中的作用，帮助理解如何灵活组合功能。

中间件是 Express 的核心概念之一，它本质上是一个函数，能够访问请求对象（req）、响应对象（res）以及处理流程中的下一个中间件函数（next）。

## 什么是中间件？

中间件函数可以对请求进行处理、修改响应、结束请求响应周期或调用下一个中间件。它们像流水线一样串联起来，依次执行，形成请求的处理链。

## 中间件的作用

- 处理请求数据（例如解析请求体）
- 进行身份验证和权限校验
- 日志记录和请求追踪
- 静态资源服务
- 错误处理

## 中间件的类型

1. **应用级中间件**  
   绑定在整个应用上的中间件，使用 `app.use()` 或特定路由绑定。

2. **路由级中间件**  
   绑定在某个路由路径上的中间件，只在匹配该路径时执行。

3. **错误处理中间件**  
   具有四个参数 `(err, req, res, next)`，专门处理应用中的错误。

4. **第三方中间件**  
   由社区提供的中间件，如 `body-parser`、`cors` 等。

5. **内置中间件**  
   Express 自带的中间件，如 `express.static` 用于托管静态资源。

## 中间件执行流程示意

请求 → 中间件1 → 中间件2 → 路由处理 → 响应

每个中间件必须调用 `next()` 才能将控制权交给下一个中间件，否则请求将被挂起。

## 示例

```js
const express = require('express');
const app = express();

// 应用级中间件示例
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 传递到下一个中间件
});

app.get('/', (req, res) => {
  res.send('Hello Middleware!');
});

app.listen(3000);
````

中间件机制是 Express 强大灵活的基础，后续章节会详细介绍中间件的更多用法。
