讲师中心 微信公众号
AI工具推荐 视频效率加速

Express中间件怎么自定义_Express中间件原理与自定义开发教程

秋雪君_8213

秋雪君_8213

发布时间:2025-11-15 23:48:05

|

712人浏览过

|

来源于php中文网

原创

中间件是Express中处理请求的核心,通过函数访问req、res和next,可实现日志、权限校验等功能。1. 基本结构为接收req、res、next参数的函数,需调用next()继续流程;2. 使用app.use()全局注册或在路由中局部使用;3. 常见场景包括请求日志记录(如打印方法和路径)、身份验证(检查token合法性)、数据预处理(挂载用户信息到req);4. 错误处理中间件有四个参数(err, req, res, next),通过next(err)触发,用于统一捕获异常并返回错误响应。掌握执行顺序与next调用时机是关键。

express中间件怎么自定义_express中间件原理与自定义开发教程

在Express中,中间件是处理请求和响应的核心机制。它本质上是一个函数,可以访问请求对象(req)、响应对象(res)以及应用请求-响应循环中的下一个中间件函数(next)。通过自定义中间件,你可以统一处理日志、权限校验、数据解析等任务。

中间件的基本结构

一个典型的中间件函数包含三个参数:req、res 和 next。其基本格式如下:

function customMiddleware(req, res, next) {
  // 在这里处理逻辑
  console.log('请求时间:', new Date().toISOString());
  // 调用 next() 让流程继续
  next();
}

这个函数可以放在任何路由之前使用,Express会按顺序执行中间件。

如何使用自定义中间件

定义好中间件后,可以通过 app.use() 全局注册,也可以绑定到特定路由。

  • 全局使用:所有请求都会经过该中间件
  • 局部使用:只对指定路径或路由生效

示例:

在SEO发布前,从路由清单生成XML网站地图和robots.txt
在SEO发布前,从路由清单生成XML网站地图和robots.txt

当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。

下载
const express = require('express');
const app = express();

app.use(customMiddleware); // 全局注册

app.get('/', (req, res) => {
  res.send('Hello World');
});

app.get('/user', customMiddleware, (req, res) => {
  res.send('用户页面');
});

常见自定义中间件场景

实际开发中,可以根据需求编写不同功能的中间件。

1. 请求日志记录
function logger(req, res, next) {
  console.log(`${req.method} ${req.path}`);
  next();
}
2. 身份验证中间件
function auth(req, res, next) {
  const token = req.headers['authorization'];
  if (!token) return res.status(401).send('未授权');
  // 简单验证示例
  if (token === 'secret-token') {
    next();
  } else {
    res.status(403).send('令牌无效');
  }
}
3. 数据预处理

比如统一给请求对象添加属性:

function addUserInfo(req, res, next) {
  req.user = { id: 123, name: 'Alice' };
  next();
}

错误处理中间件

Express支持专门的错误处理中间件,它有四个参数,区别于普通中间件。

function errorHandler(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('服务器出错');
}

// 使用时通过 next(err) 触发
app.get('/error', (req, res, next) => {
  next(new Error('测试错误'));
});

app.use(errorHandler);

基本上就这些。掌握中间件原理后,你可以灵活构建可复用、模块化的请求处理流程。关键是理解执行顺序和调用 next() 的时机,避免请求卡住。

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

569

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

584

2025.12.18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

398

2026.03.31

Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

721

2026.02.10

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

12126

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1465

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

3237

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

5401

2024.03.01

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn