Node.js局部生效的中间件

目录

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

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

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

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

[2.3 authMiddleware.js - 局部生效的中间件](#2.3 authMiddleware.js - 局部生效的中间件)

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

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


在Node.js的Express框架中,局部生效的中间件是指仅在特定路由或路由组中生效的中间件。它可以用于权限验证、数据过滤、日志记录等特定功能,而不会影响整个应用的所有请求。下面我们通过代码示例详细介绍如何实现局部生效的中间件。


1. 目录结构

bash 复制代码
/your-project
  ├── app.js                # 主文件,启动应用
  ├── middleware
  │   └── authMiddleware.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 authMiddleware = require('./middleware/authMiddleware');

// 定义公共路由(不需要中间件)
app.get('/', (req, res) => {
  res.send('<h1>Welcome to the Home Page</h1>');
});

// 使用局部中间件的路由
app.get('/dashboard', authMiddleware, (req, res) => {
  res.send('<h1>Welcome to the Dashboard</h1>');
});

app.get('/profile', authMiddleware, (req, res) => {
  res.send('<h1>Welcome to Your Profile</h1>');
});

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

说明:

  • authMiddleware 仅用于/dashboard和/profile路由,而/路由不受影响。

  • 只有访问受保护的路由时,中间件才会执行身份验证。


2.3 authMiddleware.js - 局部生效的中间件

authMiddleware.js是一个模拟身份验证的中间件,它检查请求中是否带有?auth=true参数,来决定是否允许访问。

javascript 复制代码
// middleware/authMiddleware.js
const authMiddleware = (req, res, next) => {
  if (req.query.auth === 'true') {
    console.log('Authentication successful');
    next(); // 继续执行路由处理
  } else {
    res.status(403).send('<h1>Access Denied: Authentication Required</h1>');
  }
};

module.exports = authMiddleware;

说明:

  • 这个中间件检查查询参数auth是否为true,如果是,则允许访问,否则返回403错误,并提示"访问被拒绝"。

3. 程序运行结果

启动应用:

javascript 复制代码
node app.js

然后访问以下地址:

  • 访问 http://localhost:3000/(无需认证)

    • 终端无额外输出

    • 页面显示:

      javascript 复制代码
      <h1>Welcome to the Home Page</h1>
  • 访问 http://localhost:3000/dashboard

    • 终端无输出,页面显示:

      javascript 复制代码
      <h1>Access Denied: Authentication Required</h1>
  • 访问 http://localhost:3000/dashboard?auth=true

    • 终端输出:

      javascript 复制代码
      Authentication successful
    • 页面显示:

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

4. 总结

  • 局部中间件 只影响特定的路由,而不会全局生效。

  • 通过在路由定义中传递中间件(如app.get('/dashboard', authMiddleware, handler)),可以控制它的作用范围。

  • 本示例使用了简单的身份验证逻辑(查询参数),在实际应用中可以扩展为基于JWT或Session的认证机制。

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

相关推荐
Dream-Y.ocean1 小时前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
Highcharts.js2 小时前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
翊众建站2 小时前
用 JSON-LD 给企业官网做结构化数据:LocalBusiness 与 FAQPage 实践笔记
人工智能·搜索引擎·json
kyriewen5 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
工控丫丫6 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
Dream-Y.ocean8 小时前
鸿蒙PC平台星图遥感适配实战:基于 Electron 壳方案的纯 JavaScript 遥感图像处理引擎开发
javascript·electron·harmonyos
螺丝钉tina9 小时前
[Playwright ][16]Playwright + TypeScript API 自动化测试实战:API测试
前端·javascript·typescript
Patrick_Wilson9 小时前
读懂一个 Go JSON 处理函数:从输入数据追踪结构体、校验与错误返回
go·json·编程语言
真上帝的左手11 小时前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
Highcharts.js11 小时前
React 中原生支持使用 JSX 组件配置自定义表格 Highcharts Grid
前端·javascript·react.js·前端框架·jsx·highcharts·自定义表格