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

从0死磕全栈之Next.js 中间件(Middleware)详解与实战

Next.js 的 中间件(Middleware) 是一个强大的功能,允许你在请求到达页面或 API 路由之前,在服务器端执行自定义逻辑。它非常适合用于实现身份验证、日志记录、A/B 测试、重定向、国际化等场景。


一、什么是 Next.js 中间件?

中间件是一个运行在 Edge Runtime(默认)Node.js Runtime(v15.5+ 支持) 的函数,它在 路由渲染之前 执行。你可以:

  • 修改请求头或响应头
  • 重写(rewrite)URL
  • 重定向(redirect)用户
  • 直接返回响应(如 JSON 错误)
  • 读取或设置 Cookie
  • 实现 CORS、鉴权等逻辑

⚠️ 注意:中间件应尽量轻量,避免依赖共享模块或全局变量。因为中间件可能部署在 CDN 边缘节点上,用于快速处理重定向/重写。


二、如何创建中间件?

在项目根目录(或 src 目录下)创建 middleware.ts(或 .js)文件,与 apppages 同级:

/my-next-app
├── src/
│   ├── middleware.ts   ← 中间件文件
│   ├── app/
│   └── ...
└── ...

基本结构

import { NextRequest, NextResponse } from 'next/server'export function middleware(request: NextRequest) {// 中间件逻辑return NextResponse.next() // 继续执行后续流程
}// 可选:配置中间件生效的路径
export const config = {matcher: '/about/:path*',
}

✅ 中间件函数可以是 default 导出,也可以命名为 middleware,但一个文件只能导出一个中间件函数。


三、核心功能详解

1. matcher 配置(路径匹配)

通过 config.matcher 控制中间件在哪些路径下运行:

export const config = {matcher: ['/dashboard/:path*',        // 匹配 /dashboard 及其子路径'/api/user/:id',            // 匹配带参数的路径'/((?!api|_next|favicon).*)' // 负向匹配:排除 api、静态资源等]
}
  • 支持通配符:*(零或多个)、?(零或一个)、+(一个或多个)
  • 支持正则表达式:/((?!api).*)
  • 支持高级条件匹配(has / missing):
export const config = {matcher: [{source: '/api/*',has: 
http://www.dtcms.com/a/441705.html

相关文章:

  • 用个人电脑做服务器建网站天门市基础建设网站
  • 分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
  • Redisson分布式限流
  • 计算机网络-应用层协议原理
  • 分布式文件存储系统FastDFS(入门)
  • 电机控制-PMSM无感FOC控制(五)相电流检测及重构 — 单电阻采样
  • C语言底层学习(4.数据在内存中的存储)
  • 虚幻引擎UE5专用服务器游戏开发-33 在上半身播放组合蒙太奇
  • 织梦网站栏目访问目录做网站建设哪家效益快
  • 『数据结构』消失的数字
  • 鹤山网站建设易搜互联湖南seo
  • ORB_SLAM2原理及代码解析:Tracking::CreateInitialMapMonocular() 函数
  • 【Linux】System V —— 基于建造者模式的信号量
  • VScode-ESP-IDF工程函数定义无法跳转且无注释提示
  • 最新的网站建设软件标书制作员工作内容
  • JAVA SE 基础语法 —— C / 运算符
  • SSM餐饮管理系统uto0o《开发全资源(程序 / 源码 / 数据库)+ 万言论文(文末)+ 系统界面》
  • 上饶市建设厅网站中国最新消息新冠疫苗最新消息
  • 安徽省建设银行网站关于网站建设的意见
  • 免费域名建站青岛网站有限公司
  • 广东泰通建设有限公司网站东莞人才网58
  • 什么是wap网站甘家口网站建设
  • 网站接电话中国关键词官网
  • 广州车陂网站建设公司wordpress如何修改博客模板
  • 沈阳谷歌网站建设金湖建设局网站
  • 淳化网站制作我自己的网站怎么做关键词优化
  • 深圳网站建设工作在线文字logo设计
  • 网站开发 聊天窗口镇平微网站开发
  • 网站平台延展性广州品牌网站设计价格
  • 网站开发合作意向书网站域名使用费用