代理
代理
代理允许你在请求完成之前运行代码。然后,根据传入请求,你可以通过重写、重定向、修改请求或响应头,或者直接响应来修改响应。
使用场景
代理的一些常见有效场景包括
- 读取传入请求的部分内容后进行快速重定向
- 根据 A/B 测试或实验重写到不同的页面
- 修改所有页面或部分页面的头信息
代理不适用于
- 慢速数据获取
- 会话管理
在代理中,使用带有 options.cache
、options.next.revalidate
或 options.next.tags
的 fetch 没有效果。
约定
在项目根目录或 src
目录中(如果适用)创建一个 proxy.ts
(或 .js
)文件,使其与 pages
或 app
位于同一级别。
注意:尽管每个项目只支持一个
proxy.ts
文件,你仍然可以将你的代理逻辑组织成模块。将代理功能分解为单独的.ts
或.js
文件,然后将它们导入到你的主proxy.ts
文件中。这使得路由特定的代理管理更加清晰,并集中聚合在proxy.ts
中进行控制。通过强制使用单个代理文件,可以简化配置,防止潜在冲突,并通过避免多层代理来优化性能。
示例
proxy.ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
// This function can be marked `async` if using `await` inside
export function proxy(request: NextRequest) {
return NextResponse.redirect(new URL('/home', request.url))
}
// See "Matching Paths" below to learn more
export const config = {
matcher: '/about/:path*',
}
这有帮助吗?