什么是node.js 中间件 ?
封面图
•
2025-12-28
•
nodejs
256
0
0
0
在 **Node.js** 中,**中间件(Middleware)** 是一种用于处理 HTTP 请求和响应的函数。它在请求到达最终的路由处理程序之前,可以执行一些操作,比如: - 解析请求数据 - 身份验证 - 日志记录 - 设置响应头 - 错误处理等 --- ### 一、什么是中间件? 中间件是一个函数,它有以下特点: 1. **接收三个参数**:`req`(请求对象)、`res`(响应对象)、`next`(一个函数,用于将控制权传递给下一个中间件或路由处理函数)。 2. **可以修改 `req` 和 `res` 对象**。 3. **可以结束请求-响应周期**(通过调用 `res.send()`、`res.json()` 等)。 4. **可以调用 `next()` 来传递控制权给下一个中间件**。 --- ### 二、中间件的作用 中间件通常用于: - **身份验证**:检查用户是否登录。 - **日志记录**:记录每个请求的信息。 - **解析请求体**:如 `body-parser` 解析 JSON 或 URL 编码的数据。 - **错误处理**:捕获异常并返回错误信息。 - **路由前处理**:做一些通用的逻辑处理。 --- ### 三、中间件的类型 #### 1. **应用级中间件** 作用于整个应用,可以通过 `app.use()` 注册。 ```js app.use((req, res, next) => { console.log('时间:', new Date()); next(); }); ``` #### 2. **路由级中间件** 作用于特定的路由,可以在路由中使用。 ```js app.get('/user/:id', (req, res, next) => { console.log('处理 /user/:id'); next(); }, (req, res) => { res.send('用户信息'); }); ``` #### 3. **错误处理中间件** 专门用来处理错误,需要四个参数:`(err, req, res, next)`。 ```js app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('服务器内部错误'); }); ``` #### 4. **内置中间件** Express 提供的一些默认中间件,如: - `express.json()`:解析 JSON 请求体 - `express.urlencoded()`:解析 URL 编码的请求体 - `express.static()`:托管静态文件 --- ### 四、中间件示例 ```js const express = require('express'); const app = express(); // 应用级中间件 app.use((req, res, next) => { console.log(`请求地址: ${req.url}`); next(); }); // 解析 JSON 请求体 app.use(express.json()); // 路由级中间件 app.get('/', (req, res, next) => { console.log('这是主页'); next(); }, (req, res) => { res.send('欢迎来到首页'); }); // 错误处理中间件 app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('发生错误'); }); app.listen(3000, () => { console.log('服务器运行在 http://localhost:3000'); }); ``` --- ### 五、总结 | 特性 | 描述 | |------|------| | 中间件 | 处理 HTTP 请求/响应的函数 | | 参数 | `req`, `res`, `next` | | 类型 | 应用级、路由级、错误处理、内置中间件 | | 用途 | 验证、日志、解析、错误处理等 | 如果你是初学者,建议从 Express 框架入手,因为它是 Node.js 中最常用的 Web 框架,而中间件是其核心概念之一。
上一篇:
什么是node.js流 ?
下一篇:
如何通过集群提高 nodejs 的性能 ?
标题录入,一次不能超过6条
留言
评论