中间件允许您在请求完成之前运行代码。然后,根据传入的请求,您可以通过重写、重定向、修改请求或响应标头或直接响应来修改响应。
中间件在缓存内容和路由匹配之前运行。
使用规则
使用项目根目录中的文件 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*',
}
匹配路径
将为项目中的每个路由调用中间件。以下是执行顺序:
-
headers
fromnext.config.js
- 来自 next.config.js的重定向
- 中间件(重写、重定向等)
- 来自 next.config.js 的 beforeFiles(重写)
- 文件系统路由(public/、_next/static/、pages/、app/等)
- 来自 next.config.js 的 afterFiles(重写)
- 动态路由 (/blog/[slug])
- 从 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).*)',
],
}
注意:文章来源:https://www.toymoban.com/news/detail-657020.html
- 匹配器值需要是常量,以便可以在构建时对其进行静态分析。诸如变量之类的动态值将被忽略。
Configured:文章来源地址https://www.toymoban.com/news/detail-657020.html
- 必须以 / 开头
- 可以包含命名参数: /about/:path 匹配 /about/a 和 /about/b 但不匹配 /about/a/c
- 可以对命名参数进行修饰符(以 :) 开头: /about/:path* 匹配 /about/a/b/c 因为 * 为零或更多。 ?为零或一且+一或多个
- 可以使用括号括起来的正则表达式:/about/(.*) 与/about/:path* 相同
到了这里,关于NextJs - Middleware(中间件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!