当前位置: 首页 > article >正文

Node.js全局生效的中间件

目录

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的全局中间件!

 

相关文章:

Node.js全局生效的中间件

目录 1. 目录结构 2. 代码实现 2.1 安装Express 2.2 app.js - 主文件 2.3 globalMiddleware.js - 全局中间件 3. 程序运行结果 4. 总结 在Node.js的Express框架中&#xff0c;全局生效的中间件是指应用程序启动后&#xff0c;对所有请求都有效的中间件。它通常用于日志记…...

国家天文台携手阿里云,发布国际首个太阳大模型“金乌”

2025年4月1日&#xff0c;中国科学院国家天文台与阿里云共同宣布推出全球首个太阳物理大模型“金乌”&#xff0c;在太阳活动预测领域实现颠覆性突破——其针对破坏性最强的M5级太阳耀斑预报准确率高达91%&#xff0c;远超传统数值模型&#xff0c;标志着人类对太阳的认知迈入“…...

数据结构(5)——栈

目录 前言 一、栈的概念及其结构 二、栈的实现 2.1说明 2.2动态栈结构体定义 2.3初始化 2.4销毁 2.5进&#xff08;压&#xff09;栈 2.6检验栈是否为空 2.7弹&#xff08;出&#xff09;栈 2.8栈的元素个数 2.9访问栈顶元素 三、运行 总结 前言 栈是一种常见的…...

Css径向渐变 - radial-gradient

由background-image: radial-gradient(at 75% 7%, blue 0px, transparent 50%);引出&#xff1a; 一、径向渐变是什么 径向渐变是颜色从一个中心点向外扩散的变化过程。 二、radial-gradient 函数是什么 1、使用语法&#xff1a; background-image: radial-gradient(shape si…...

理解激活函数,多个网络层之间如何连接

1. 激活函数如何在两个层之间作用 如果不在两个层之间添加激活函数&#xff0c;模型将无法学习非线性关系&#xff0c;表现出像线性模型一样的局限性。 LeakyReLU(0.2) 是一个激活函数&#xff0c;它的作用是对每一层的输出进行非线性转换。激活函数通常在神经网络中用于增加网…...

HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板

HTML5 Canvas绘画板项目实战&#xff1a;打造一个功能丰富的在线画板 这里写目录标题 HTML5 Canvas绘画板项目实战&#xff1a;打造一个功能丰富的在线画板项目介绍技术栈核心功能实现1. 画板初始化与工具管理2. 多样化绘画工具3. 事件处理机制 技术要点分析1. Canvas上下文优化…...

2025亲测有用 yolov8 pt转onnx转ncnn 部署安卓

参考文章&#xff1a;pt转onnx转ncnn模型&#xff08;yolov8部署安卓&#xff09;_best.pt 转ncnn模型-CSDN博客 Yolov8-Ncnn模型部署Android&#xff0c;实现单一图片识别_yolov8转ncnn-CSDN博客 onnx转化为ncnn这条路径现在已经落后了&#xff0c;更多的是通过pnnx转化为nc…...

cursor的.cursorrules详解

文章目录 1. 文件位置与作用2. 基本语法规则3. 常用规则类型与示例3.1 忽略文件/目录3.2 限制代码生成范围3.3 自定义补全建议3.4 安全规则 4. 高级用法4.1 条件规则4.2 正则表达式匹配4.3 继承规则 5. 示例文件6. 注意事项 Cursor 是一款基于 AI 的智能代码编辑器&#xff0c;…...

MySQL 入门大全:运算符

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

Oracle数据库数据编程SQL<3.6 PL/SQL 包(Package)>

包是Oracle数据库中一种重要的PL/SQL程序结构,它将逻辑相关的变量、常量、游标、异常、过程和函数组织在一起,提供了更好的封装性和模块化。在大型项目中,可能有很多模块,而每一个模块又有自己的存过、函数等。而这些存过、函数默认是放在一起的,如果所有的存过函数都是放…...

Rust 语言语法糖深度解析:优雅背后的编译器魔法

之前介绍了语法糖的基本概念和在C/Python/JavaScript中的使用&#xff0c;今天和大家讨论语法糖在Rust中的表现形式。 程序语言中的语法糖&#xff1a;让代码更优雅的甜味剂 引言&#xff1a;语法糖的本质与价值 语法糖(Syntactic Sugar) 是编程语言中那些并不引入新功能&…...

React-Markdown详解

React-Markdown 详解&#xff08;2025年最新实践指南&#xff09; 一、核心特性与架构解析 React-Markdown 是一个基于 React 的 Markdown 渲染组件库&#xff0c;其核心设计理念是通过 Unified 生态系统实现安全、可扩展的 Markdown 解析。关键特性包括&#xff1a; 安全渲染…...

uniapp 微信小程序 使用ucharts

文章目录 前言一、组件功能概述二、代码结构分析2.1 模板结构 总结 前言 本文介绍一个基于 Vue 框架的小程序图表组件开发方案。该组件通过 uCharts 库实现折线图的绘制&#xff0c;并支持滚动、缩放、触摸提示等交互功能。文章将从代码结构、核心方法、交互实现和样式设计等方…...

mysql中将外部文本导入表中过程出现的错误及解决方法

问题一&#xff1a; MySQL Loading local data is disabled; this must be enabled on both the client and server sides &#xff08;MySQL加载本地数据被禁用&#xff1b;这必须在客户端和服务器端同时启用&#xff09; 解决方法&#xff1a; 1&#xff0c;依次输入以下命令…...

C#实现HiveQL建表语句中特殊数据类型的包裹

用C#实现搜索字符串中用’(‘和’)‘包裹的最外层的里面里面的字符串&#xff0c;将里面的记录按一个或多个空格、换行或tab&#xff0c;或者是它的在一起的组合作为分隔&#xff0c;分隔出多个字符串组&#xff0c;如果组中有字符串中同时包含’<‘和’>’&#xff0c;则…...

【idea】实用插件

SonarLint SonarLint&#xff1a;代码质量扫描工具 使用 SonarLint 可以帮助我们发现代码的问题,并且还提供了相应的解决方案. 对于每一个问题&#xff0c;SonarLint 都给出了示例&#xff0c;还有相应的解决方案&#xff0c;教我们怎么修改&#xff0c;极大的方便了我们的开发…...

关于mysql 数据库中的 慢SQL 的详细分析,包括定义、原因、解决方法及表格总结

以下是关于 慢SQL 的详细分析&#xff0c;包括定义、原因、解决方法及表格总结&#xff1a; 1. 什么是慢SQL&#xff1f; 定义&#xff1a; 慢SQL 是指执行时间超过预设阈值&#xff08;如 2 秒&#xff09;的 SQL 语句&#xff0c;通常会导致数据库响应延迟、资源占用过高&am…...

uniapp选择文件使用formData格式提交数据

1. Vue实现 在vue项目中,我们有个文件,和一些其他字段数据需要提交的时候,我们都是使用axios 设置请求头中的Content-Type: multipart/form-data,然后new FormData的方式来进行提交。方式如下: const sendRequest = () => {const formData = new FormData()formData…...

蓝牙数字音频和模拟音频优劣势对比?

蓝牙模块中我们常说的模拟音频和数字音频&#xff0c;是指两种不同的信号处理技术&#xff0c;它们都可以实现声音的录制、存储、编辑、压缩或播放&#xff0c;但也有一些区别和特点。本文将为您深入解析蓝牙数字音频和模拟音频的一些常见区别。 数字音频&#xff1a; 蓝牙数…...

WiFi(无线局域网)技术的多种工作模式

WiFi&#xff08;无线局域网&#xff09;技术支持多种工作模式&#xff0c;以满足不同的网络需求和应用场景。以下是主要的WiFi工作模式及其详细说明&#xff1a; 1. 基础设施模式&#xff08;Infrastructure Mode&#xff09; [无线接入点 (AP)]/ | \ [客户端…...

基于OpenCV的指纹验证:从原理到实战的深度解析

指纹识别的技术革命与OpenCV的轻量级方案 在生物特征识别领域&#xff0c;指纹识别始终以独特性和稳定性占据核心地位。随着OpenCV等开源视觉库的普及&#xff0c;这项看似"高大上"的技术正逐步走向民用化开发。本文将突破传统算法框架&#xff0c;提出一套基于OpenC…...

VMware+Ubuntu+VScode+ROS一站式教学+常见问题解决

目录 一.VMware的安装 二.Ubuntu下载 1.前言 2.Ubuntu版本选择 三.VMware中Ubuntu的安装 四.Ubuntu系统基本设置 1.中文更改 2.中文输入法更改 3. 辅助工具 vmware tools 五.VScode的安装ros基本插件 1.安装 2.ros辅助插件下载 六.ROS安装 1.安装ros 2.配置ROS…...

音视频(一)ZLMediaKit搭建部署

前言 一个基于C11的高性能运营级流媒体服务框架 全协议支持H264/H265/AAC/G711/OPUS/MP3&#xff0c;部分支持VP8/VP9/AV1/JPEG/MP3/H266/ADPCM/SVAC/G722/G723/G729 1&#xff1a;环境 ubuntu22.* ZLMediaKit downlaod:https://github.com/ZLMediaKit/ZLMediaKit or https://g…...

leetcode25.k个一组翻转链表

思路源自 【力扣hot100】【LeetCode 25】k个一组翻转链表&#xff5c;虚拟节点的应用 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(in…...

配置 UOS/deepin 系统远程桌面,实现多台电脑协同办公

由于开发工作的需要&#xff0c;我的办公桌上目前有多台电脑。一台是 i7 配置的电脑&#xff0c;运行 UOS V20 系统&#xff0c;作为主力办公电脑&#xff0c;负责处理企业微信、OA 等任务&#xff0c;并偶尔进行代码编译和验证软件在 UOS V20 系统下的兼容性&#xff1b;另一台…...

配置Next.js环境 使用vscode

配置 Next.js 的开发环境其实非常简单&#xff0c;下面是一个从零开始的完整步骤&#xff0c;适用于 Windows、macOS 和 Linux&#xff1a; ✅ 一、准备工作 确保你已经安装了以下软件&#xff1a; 1. Node.js&#xff08;推荐 LTS 版本&#xff09; 官网&#xff1a;https:/…...

Vite相关知识点

一、自动导入vue vue-router pinia 1、安装unplugin-auto-import npm install unplugin-auto-import -D 2、引入 import AutoImport from unplugin-auto-import/vite; 3、配置vite.config.ts plugins: [ vue(), vueDevTools(), AutoImport({ include: [ /…...

RCE复现

1.过滤flag <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__);代码审计过滤了"flag"关键词&#xff0c;但限制较弱&#xff0c;容易绕过 ?csystem("ls&…...

电子电气架构 --- 域控制器和EE架构关系

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现CPO-LSTM冠豪猪算法优化长短期…...