Node.js全局生效的中间件

目录

[1. 目录结构](#1. 目录结构)

[2. 代码实现](#2. 代码实现)

[2.1 安装Express](#2.1 安装Express)

[2.2 app.js - 主文件](#2.2 app.js - 主文件)

[2.3 globalMiddleware.js - 全局中间件](#2.3 globalMiddleware.js - 全局中间件)

[3. 程序运行结果](#3. 程序运行结果)

[4. 总结](#4. 总结)


在Node.js的Express框架中,全局生效的中间件是指应用程序启动后,对所有请求都有效的中间件。它通常用于日志记录、权限验证、请求解析等场景。下面我们通过代码示例来详细介绍如何实现全局生效的中间件。


1. 目录结构

bash 复制代码
/your-project
  ├── app.js                # 主文件,启动应用
  ├── middleware
  │   └── globalMiddleware.js # 全局生效的中间件
  └── package.json          # 项目依赖管理文件

2. 代码实现

2.1 安装Express

如果你还没有安装Express,请先执行以下命令安装:

bash 复制代码
npm init -y
npm install express

2.2 app.js - 主文件

app.js是应用的主入口,我们将在这里引入全局中间件并注册路由。

javascript 复制代码
// app.js
const express = require('express');
const app = express();

// 引入全局中间件
const globalMiddleware = require('./middleware/globalMiddleware');

// 使用全局中间件
app.use(globalMiddleware);

// 定义一些测试路由
app.get('/', (req, res) => {
  res.send('<h1>Welcome to the Home Page</h1>');
});

app.get('/about', (req, res) => {
  res.send('<h1>Welcome to the About Page</h1>');
});

// 监听端口
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

说明:

  • 通过app.use(globalMiddleware)注册全局中间件,使得所有请求都会先经过该中间件。

2.3 globalMiddleware.js - 全局中间件

globalMiddleware.js定义了一个全局生效的中间件,它会记录请求的时间、方法和访问的URL。

javascript 复制代码
// middleware/globalMiddleware.js
const globalMiddleware = (req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // 继续执行下一个中间件或路由
};

module.exports = globalMiddleware;

说明:

  • 这个中间件会在每个请求到达路由之前被调用。

  • new Date().toISOString()用于记录请求时间,req.method记录请求方式,req.url记录访问的路径。

  • next()用于继续传递请求,否则请求会一直停留在这个中间件里。


3. 程序运行结果

启动应用:

bash 复制代码
node app.js

然后访问以下地址:

  • 访问http://localhost:3000/时,终端输出:

    javascript 复制代码
    [2025-04-01T12:00:00.000Z] GET /

    页面显示:

    javascript 复制代码
    <h1>Welcome to the Home Page</h1>
  • 访问http://localhost:3000/about时,终端输出:

    javascript 复制代码
    [2025-04-01T12:00:05.000Z] GET /about

    页面显示:

    javascript 复制代码
    <h1>Welcome to the About Page</h1>

4. 总结

  • 全局中间件适用于所有请求,不需要在每个路由单独调用。

  • 通过app.use(middleware)可以注册全局中间件,所有请求都会先经过这个中间件。

  • 本示例中的全局中间件用于记录请求日志,但它也可以用于权限验证、请求体解析等更多场景。

希望本教程能帮助你理解Node.js的全局中间件!

相关推荐
MartinYeung524 分钟前
npm爆发大规模供应链攻击 蠕虫污染 2000+ 个包版本: 深度技术剖析
前端·npm·node.js
huabuyu25 分钟前
治好 AI 长回答的卡、闪、膨胀:渲染开销从 50 万次砍到 1000
前端·javascript
Asize28 分钟前
无状态 Stateless:大模型为什么记不住你是谁
javascript·人工智能·架构
嘟嘟071729 分钟前
学了 useContext 还是不理解?从 prop drilling 到 useMouse 的一次完整复盘
前端·javascript·react.js
huabuyu32 分钟前
模型吐到一半的 JSON 为什么不崩、不卡、不抖?流式 Function Call 的三层修复
前端·javascript
触底反弹35 分钟前
JS 运行原理与 Event Loop:从 Web Worker 实战说起
前端·javascript·react.js
0__O36 分钟前
从一段 JS 回调变为异步的代码来了解 JavaScript 异步编程
javascript
胡萝卜术39 分钟前
声明式与命令式的边界:从鉴权路由守卫到 useRef 的引用哲学
前端·javascript·面试
默_笙1 小时前
🍉 我把《天龙八部》喂给了 AI,问它"段誉会什么武功?"答案让我惊呆了
前端·javascript
鲟迹1 小时前
NVM 管理Node.js版本
node.js