Node.js中心件的分类

打印 上一主题 下一主题

主题 1711|帖子 1711|积分 5133

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次
Node.js 中心件的分类与详细先容
1. 目次结构
2. Express 中心件的重要分类
3. 代码实现
1. 应用级中心件(作用于整个应用)
示例:日志记录中心件
2. 路由级中心件(仅作用于特定路由)
示例:身份验证中心件
3. Express 内置中心件(无需额外安装)
示例:剖析 JSON 哀求体
4. 第三方中心件(如 cors, morgan)
示例:利用 cors 答应跨域哀求
5. 错误处置惩罚中心件(用于捕捉错误)
示例:全局错误处置惩罚中心件
4. 总结

在 Node.js 的 Express 框架中,中心件是用于处置惩罚哀求和相应的焦点机制。中心件的作用包括日志记录、哀求剖析、权限验证、错误处置惩罚等。本文将详细先容 Express 框架中心件的重要分类,并提供完备的代码示例,帮助开辟者更好地明白和应用中心件。

1. 目次结构

  1. /your-project
  2.   ├── app.js                # 主文件,启动应用
  3.   ├── middleware
  4.   │   ├── logger.js         # 应用级中间件(日志记录)
  5.   │   ├── auth.js           # 路由级中间件(身份验证)
  6.   │   ├── requestTime.js    # 内置中间件(解析请求时间)
  7.   │   ├── notFound.js       # 404 处理中间件
  8.   │   ├── errorHandler.js   # 错误处理中间件
  9.   └── package.json          # 依赖管理文件
复制代码

2. Express 中心件的重要分类

Express 框架中的中心件重要分为以下几类:

  • 应用级中心件(作用于整个应用)
  • 路由级中心件(仅作用于特定路由)
  • 内置中心件(Express 提供的官方中心件)
  • 第三方中心件(社区开辟的功能增强中心件)
  • 错误处置惩罚中心件(专门用于捕捉和处置惩罚错误)

3. 代码实现

1. 应用级中心件(作用于整个应用)

应用级中心件适用于全局处置惩罚,如日志记录、权限验证等,通常利用 app.use() 注册。
示例:日志记录中心件
文件名:middleware/logger.js
  1. // middleware/logger.js
  2. const logger = (req, res, next) => {
  3.   console.log(`Received ${req.method} request for ${req.url}`);
  4.   next(); // 继续执行下一个中间件或路由处理
  5. };
  6. module.exports = logger;
复制代码
在 app.js 中利用:
  1. // app.js
  2. const express = require('express');
  3. const app = express();
  4. const logger = require('./middleware/logger');
  5. // 全局使用日志中间件
  6. app.use(logger);
  7. app.get('/', (req, res) => {
  8.   res.send('<h1>Home Page</h1>');
  9. });
  10. app.listen(3000, () => {
  11.   console.log('Server running on http://localhost:3000');
  12. });
复制代码
运行结果:
访问 http://localhost:3000/ 时,终端输出:
  1. Received GET request for /
复制代码

2. 路由级中心件(仅作用于特定路由)

路由级中心件通常用于身份验证、权限控制等功能。
示例:身份验证中心件
文件名:middleware/auth.js
  1. // middleware/auth.js
  2. const auth = (req, res, next) => {
  3.   if (req.query.auth === 'true') {
  4.     next(); // 通过验证,继续执行
  5.   } else {
  6.     res.status(403).send('<h1>Access Denied
  7. </h1>');
  8.   }
  9. };
  10. module.exports = auth;
复制代码
在 app.js 中利用:
  1. const auth = require('./middleware/auth');
  2. app.get('/dashboard', auth, (req, res) => {
  3.   res.send('<h1>Welcome to the Dashboard
  4. </h1>');
  5. });
复制代码
运行结果:
访问 http://localhost:3000/dashboard?auth=true:
  1. Welcome to the Dashboard
复制代码
访问 http://localhost:3000/dashboard:
  1. Access Denied
复制代码

3. Express 内置中心件(无需额外安装)

Express 提供了一些内置的中心件,如 express.json()、express.urlencoded() 和 express.static()。
示例:剖析 JSON 哀求体
在 app.js 中添加:
  1. app.use(express.json());
  2. app.post('/data', (req, res) => {
  3.   res.json({ received: req.body });
  4. });
复制代码
利用 Postman 发送 JSON 数据:
哀求体(JSON 格式):
  1. { "name": "Alice", "age": 25 }
复制代码
返回结果:
  1. { "received": { "name": "Alice", "age": 25 }
  2. }
复制代码

4. 第三方中心件(如 cors, morgan)

第三方中心件通常用于增强 Express 应用的功能,例如 cors 处置惩罚跨域哀求,morgan 记录日志等。
示例:利用 cors 答应跨域哀求
安装 cors:
  1. npm install cors
复制代码
在 app.js 中利用:
  1. const cors = require('cors');
  2. app.use(cors());
  3. app.get('/api/data', (req, res) => {
  4.   res.json({ message: 'CORS Enabled' });
  5. });
复制代码

5. 错误处置惩罚中心件(用于捕捉错误)

错误处置惩罚中心件专门用于处置惩罚应用中的错误,必须包罗 err 参数。
示例:全局错误处置惩罚中心件
文件名:middleware/errorHandler.js
  1. // middleware/errorHandler.js
  2. const errorHandler = (err, req, res, next) => {
  3.   console.error(`Error: ${err.message}`);
  4.   res.status(500).send('<h1>Internal Server Error
  5. </h1>');
  6. };
  7. module.exports = errorHandler;
复制代码
在 app.js 中利用:
  1. const errorHandler = require('./middleware/errorHandler');
  2. app.get('/error', (req, res, next) => {
  3.   next(new Error('Something went wrong!')); // 触发错误处理
  4. });
  5. app.use(errorHandler);
复制代码
访问 http://localhost:3000/error,页面表现:
  1. Internal Server Error
复制代码
终端输出:
  1. Error: Something went wrong!
复制代码

4. 总结


  • 应用级中心件 - 作用于整个应用,如日志记录。
  • 路由级中心件 - 仅在特定路由见效,如身份验证。
  • Express 内置中心件 - 剖析 JSON 哀求、静态文件等。
  • 第三方中心件 - 额外安装,如 cors 处置惩罚跨域哀求。
  • 错误处置惩罚中心件 - 捕捉错误并返回友好的错误信息。
本教程提供了完备代码和运行示例,帮助开辟者深入明白 Express 中心件的分类和利用,进步应用的可维护性和扩展性!
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表