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

NextJs - Middleware(中间件)

中间件允许您在请求完成之前运行代码。然后,根据传入的请求,您可以通过重写、重定向、修改请求或响应标头或直接响应来修改响应。
中间件在缓存内容和路由匹配之前运行。

使用规则

使用项目根目录中的文件 middleware.ts(或 .js)来定义中间件。例如,与页面或应用程序处于同一级别,或者在 src 内部(如果适用)。

// middleware.ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'// This function can be marked `async` if using `await` inside
export function middleware(request: NextRequest) {return NextResponse.redirect(new URL('/home', request.url))
}// See "Matching Paths" below to learn more
export const config = {matcher: '/about/:path*',
}

匹配路径

将为项目中的每个路由调用中间件。以下是执行顺序:

  1. headers from next.config.js
  2. 来自 next.config.js的重定向
  3. 中间件(重写、重定向等)
  4. 来自 next.config.js 的 beforeFiles(重写)
  5. 文件系统路由(public/、_next/static/、pages/、app/等)
  6. 来自 next.config.js 的 afterFiles(重写)
  7. 动态路由 (/blog/[slug])
  8. 从 next.config.js 回退(重写)

Matcher (匹配器)

matcher 允许您过滤中间件以在特定路径上运行。

export const config = {matcher: '/about/:path*',
}

可以使用数组语法匹配单个路径或多个路径:

export const config = {matcher: ['/about/:path*', '/dashboard/:path*'],
}

匹配器配置允许完整的正则表达式,因此支持负向查找或字符匹配等匹配。可以在此处查看用于匹配除特定路径之外的所有路径的负前瞻示例:

export const config = {matcher: [/** Match all request paths except for the ones starting with:* - api (API routes)* - _next/static (static files)* - _next/image (image optimization files)* - favicon.ico (favicon file)*/'/((?!api|_next/static|_next/image|favicon.ico).*)',],
}

注意:

  • 匹配器值需要是常量,以便可以在构建时对其进行静态分析。诸如变量之类的动态值将被忽略。

Configured:

  1. 必须以 / 开头
  2. 可以包含命名参数: /about/:path 匹配 /about/a 和 /about/b 但不匹配 /about/a/c
  3. 可以对命名参数进行修饰符(以 :) 开头: /about/:path* 匹配 /about/a/b/c 因为 * 为零或更多。 ?为零或一且+一或多个
  4. 可以使用括号括起来的正则表达式:/about/(.*) 与/about/:path* 相同

http://www.lryc.cn/news/133951.html

相关文章:

  • 记录几个Hudi Flink使用问题及解决方法
  • Go:测试框架GoConvey 简介
  • JavaWeb-特殊文件(propertis与XML)
  • ffmpeg合并mp4视频文件
  • ATF BL1/BL2 ufs_read_blocks/ufs_write_blocks使用分析
  • Elasticsearch(十二)搜索---搜索匹配功能③--布尔查询及filter查询原理
  • 解决Windows下的docker desktop无法启动问题
  • LLM生成式 AI 项目生命周期Generative AI project lifecycle
  • java高并发系列 - 第13天:JUC中的Condition对象
  • 【TTY子系统】printf与printk深入驱动解析
  • 无涯教程-PHP - 全局变量函数
  • shell脚本之循环语句
  • 派森 #P122. 峰值查找
  • 基础网络详解4--HTTP CookieSession 思考
  • 14. 利用Canvas自制时钟组件
  • 微信小程序使用云存储和Markdown开发页面
  • 【C++】运算符重载 | 赋值运算符重载
  • Python学习 -- 类对象从创建到常用函数
  • 数组分割(2023省蓝桥杯)n种讨论 JAVA
  • 很好的启用window10专业版系统自带的远程桌面
  • TCP定制协议,序列化和反序列化
  • YOLOX在启智AI GPU/CPU平台部署笔记
  • 23种设计模式攻关
  • 【jsthreeJS】入门three,并实现3D汽车展示厅,附带全码
  • unity将结构体/列表与json字符串相互转化
  • 【Vue】vue2项目使用swiper轮播图2023年8月21日实战保姆级教程
  • 【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)
  • MATLAB算法实战应用案例精讲-【深度学习】模型压缩
  • Matlab使用
  • BladeX多数据源配置