目录
[Node.js 自定义中间件详细介绍](#Node.js 自定义中间件详细介绍)
[1. 目录结构](#1. 目录结构)
[2. 什么是自定义中间件?](#2. 什么是自定义中间件?)
[3. 代码实现](#3. 代码实现)
[1. 自定义日志中间件(记录请求信息)](#1. 自定义日志中间件(记录请求信息))
[2. 自定义身份验证中间件(校验用户权限)](#2. 自定义身份验证中间件(校验用户权限))
[3. 自定义请求时间中间件(记录请求发生时间)](#3. 自定义请求时间中间件(记录请求发生时间))
[4. 总结](#4. 总结)
在 Node.js 的 Express 框架中,中间件是处理 HTTP 请求的核心部分,开发者可以使用自定义中间件来增强功能,例如日志记录、身份验证、错误处理等。本文将详细介绍如何创建和使用自定义中间件,并提供完整代码示例,帮助开发者更深入理解 Express 中间件的用法。
1. 目录结构
javascript
/your-project
├── app.js # 主文件,启动应用
├── middleware
│ ├── logger.js # 自定义日志中间件
│ ├── auth.js # 自定义身份验证中间件
│ ├── requestTime.js # 自定义请求时间中间件
└── package.json # 依赖管理文件
2. 什么是自定义中间件?
自定义中间件是开发者自己编写的函数,位于请求到达路由之前或响应返回客户端之前,通常用于:
-
记录请求日志
-
处理用户身份验证
-
解析请求数据
-
处理错误
自定义中间件格式:
javascript
const middlewareFunction = (req, res, next) => {
// 处理逻辑
next(); // 继续执行下一个中间件或路由
};
module.exports = middlewareFunction;
3. 代码实现
1. 自定义日志中间件(记录请求信息)
文件名:middleware/logger.js
javascript
// middleware/logger.js
const logger = (req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next();
};
module.exports = logger;
在 app.js
中使用:
javascript
// app.js
const express = require('express');
const app = express();
const logger = require('./middleware/logger');
// 全局使用日志中间件
app.use(logger);
app.get('/', (req, res) => {
res.send('<h1>Home Page</h1>');
});
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
运行结果:
访问 http://localhost:3000/
时,终端输出:
javascript
[2025-04-01T12:00:00.000Z] GET /
2. 自定义身份验证中间件(校验用户权限)
文件名:middleware/auth.js
javascript
// middleware/auth.js
const auth = (req, res, next) => {
if (req.query.auth === 'true') {
next(); // 通过验证,继续执行
} else {
res.status(403).send('<h1>Access Denied</h1>');
}
};
module.exports = auth;
在 app.js
中使用:
javascript
const auth = require('./middleware/auth');
app.get('/dashboard', auth, (req, res) => {
res.send('<h1>Welcome to the Dashboard</h1>');
});
运行结果:
访问 http://localhost:3000/dashboard?auth=true
:
javascript
Welcome to the Dashboard
访问 http://localhost:3000/dashboard
:
javascript
Access Denied
3. 自定义请求时间中间件(记录请求发生时间)
文件名:middleware/requestTime.js
javascript
// middleware/requestTime.js
const requestTime = (req, res, next) => {
req.requestTime = new Date().toISOString();
next();
};
module.exports = requestTime;
在 app.js
中使用:
javascript
const requestTime = require('./middleware/requestTime');
app.use(requestTime);
app.get('/time', (req, res) => {
res.send(`<h1>Request received at: ${req.requestTime}</h1>`);
});
运行结果:
访问 http://localhost:3000/time
:
javascript
Request received at: 2025-04-01T12:00:00.000Z
4. 总结
-
日志中间件 - 记录请求信息,方便调试。
-
身份验证中间件 - 校验用户权限,控制访问权限。
-
请求时间中间件 - 记录请求时间,方便分析请求时间点。
本教程提供完整代码和运行示例,帮助开发者掌握 Express 自定义中间件的用法,提高 Node.js 应用的可维护性和扩展性!