目录
在 Node.js 的 Express 框架中,中间件是用于处理请求和响应的核心机制。中间件的作用包括日志记录、请求解析、权限验证、错误处理等。本文将详细介绍 Express 框架中间件的主要分类,并提供完整的代码示例,帮助开发者更好地理解和应用中间件。
1. 目录结构
/your-project
├── app.js # 主文件,启动应用
├── middleware
│ ├── logger.js # 应用级中间件(日志记录)
│ ├── auth.js # 路由级中间件(身份验证)
│ ├── requestTime.js # 内置中间件(解析请求时间)
│ ├── notFound.js # 404 处理中间件
│ ├── errorHandler.js # 错误处理中间件
└── package.json # 依赖管理文件
2. Express 中间件的主要分类
Express 框架中的中间件主要分为以下几类:
应用级中间件(作用于整个应用)
路由级中间件(仅作用于特定路由)
内置中间件(Express 提供的官方中间件)
第三方中间件(社区开发的功能增强中间件)
错误处理中间件(专门用于捕获和处理错误)
3. 代码实现
1. 应用级中间件(作用于整个应用)
应用级中间件适用于全局处理,如日志记录、权限验证等,通常使用 app.use()
注册。
示例:日志记录中间件
文件名:middleware/logger.js
// middleware/logger.js
const logger = (req, res, next) => {
console.log(`Received ${req.method} request for ${req.url}`);
next(); // 继续执行下一个中间件或路由处理
};
module.exports = logger;
在 app.js
中使用:
// 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/
时,终端输出:
Received GET request for /
2. 路由级中间件(仅作用于特定路由)
路由级中间件通常用于身份验证、权限控制等功能。
示例:身份验证中间件
文件名:middleware/auth.js
// 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
中使用:
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
:
Welcome to the Dashboard
访问 http://localhost:3000/dashboard
:
Access Denied
3. Express 内置中间件(无需额外安装)
Express 提供了一些内置的中间件,如 express.json()
、express.urlencoded()
和 express.static()
。
示例:解析 JSON 请求体
在 app.js
中添加:
app.use(express.json());
app.post('/data', (req, res) => {
res.json({ received: req.body });
});
使用 Postman 发送 JSON 数据:
请求体(JSON 格式):
{ "name": "Alice", "age": 25 }
返回结果:
{ "received": { "name": "Alice", "age": 25 } }
4. 第三方中间件(如 cors
, morgan
)
第三方中间件通常用于增强 Express 应用的功能,例如 cors
处理跨域请求,morgan
记录日志等。
示例:使用 cors
允许跨域请求
安装 cors
:
npm install cors
在 app.js
中使用:
const cors = require('cors');
app.use(cors());
app.get('/api/data', (req, res) => {
res.json({ message: 'CORS Enabled' });
});
5. 错误处理中间件(用于捕获错误)
错误处理中间件专门用于处理应用中的错误,必须包含 err
参数。
示例:全局错误处理中间件
文件名:middleware/errorHandler.js
// middleware/errorHandler.js
const errorHandler = (err, req, res, next) => {
console.error(`Error: ${err.message}`);
res.status(500).send('<h1>Internal Server Error</h1>');
};
module.exports = errorHandler;
在 app.js
中使用:
const errorHandler = require('./middleware/errorHandler');
app.get('/error', (req, res, next) => {
next(new Error('Something went wrong!')); // 触发错误处理
});
app.use(errorHandler);
访问 http://localhost:3000/error
,页面显示:
Internal Server Error
终端输出:
Error: Something went wrong!
4. 总结
应用级中间件 - 作用于整个应用,如日志记录。
路由级中间件 - 仅在特定路由生效,如身份验证。
Express 内置中间件 - 解析 JSON 请求、静态文件等。
第三方中间件 - 额外安装,如
cors
处理跨域请求。错误处理中间件 - 捕获错误并返回友好的错误信息。
本教程提供了完整代码和运行示例,帮助开发者深入理解 Express 中间件的分类和使用,提高应用的可维护性和扩展性!