Node.js自定义中间件

目录

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

  1. 日志中间件 - 记录请求信息,方便调试。

  2. 身份验证中间件 - 校验用户权限,控制访问权限。

  3. 请求时间中间件 - 记录请求时间,方便分析请求时间点。

本教程提供完整代码和运行示例,帮助开发者掌握 Express 自定义中间件的用法,提高 Node.js 应用的可维护性和扩展性!

相关推荐
我命由我123452 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
抱抱宝4 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
用户938515635074 小时前
Next.js 笔记系统(二):Redis 数据服务与侧边栏组件拆分实战
javascript·全栈
zhanghaha13145 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
2401_858286117 小时前
VSCODE远程链接错误: 无法建立链接,过程试图写入的管道不存在的解决方法
ide·vscode·编辑器
像风一样自由20207 小时前
加强版VScode结合remote-ssh远程连接服务器开发指南
服务器·vscode·ssh
Heo8 小时前
大厂前端调试不能只会debugger
前端·javascript·面试
云水一下8 小时前
零基础玩转bWAPP靶场(四十六):XSS - Reflected (AJAX/JSON)
web安全·ajax·json·xss·bwapp·reflected
一朵好运莲9 小时前
Turbo Console Log插件VSCode更改log快捷键教程
ide·vscode·编辑器
windliang9 小时前
Claude Code 源码分析(十二):错误处理与自动恢复:让 Agent 稳定运行
前端·javascript·面试