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