Node.js全局生效的中间件

时间:2025-04-03 07:04:03

目录

1. 目录结构

2. 代码实现

2.1 安装Express

2.2 app.js - 主文件

2.3 globalMiddleware.js - 全局中间件

3. 程序运行结果

4. 总结


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


1. 目录结构

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

2. 代码实现

2.1 安装Express

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

npm init -y
npm install express

2.2 app.js - 主文件

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

// 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。

// 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. 程序运行结果

启动应用:

node app.js

然后访问以下地址:

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

    [2025-04-01T12:00:00.000Z] GET /
    

    页面显示:

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

    [2025-04-01T12:00:05.000Z] GET /about
    

    页面显示:

    <h1>Welcome to the About Page</h1>
    

4. 总结

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

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

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

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