Node.js中间件的分类

发布于:2025-04-06 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

Node.js 中间件的分类与详细介绍

1. 目录结构

2. Express 中间件的主要分类

3. 代码实现

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

示例:日志记录中间件

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

示例:身份验证中间件

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

示例:解析 JSON 请求体

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

示例:使用 cors 允许跨域请求

5. 错误处理中间件(用于捕获错误)

示例:全局错误处理中间件

4. 总结


在 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 框架中的中间件主要分为以下几类:

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

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

  3. 内置中间件(Express 提供的官方中间件)

  4. 第三方中间件(社区开发的功能增强中间件)

  5. 错误处理中间件(专门用于捕获和处理错误)


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. 总结

  1. 应用级中间件 - 作用于整个应用,如日志记录。

  2. 路由级中间件 - 仅在特定路由生效,如身份验证。

  3. Express 内置中间件 - 解析 JSON 请求、静态文件等。

  4. 第三方中间件 - 额外安装,如 cors 处理跨域请求。

  5. 错误处理中间件 - 捕获错误并返回友好的错误信息。

本教程提供了完整代码和运行示例,帮助开发者深入理解 Express 中间件的分类和使用,提高应用的可维护性和扩展性!