如何在Middleware层处理状态码?实现500状态码重定向
Next.js Middleware处理500错误并重定向到主页的正确实现
原代码的问题
- Middleware函数参数错误:Next.js的
middleware函数仅接收NextRequest类型的请求对象作为参数,无需传入NextResponse。 - 重定向写法错误:
NextResponse不存在redirect([500], "/")这种用法,且原逻辑未实现检测响应500状态码的核心逻辑。
正确实现方案
要在Middleware中捕获下游返回的500状态码并重定向到主页,需先获取响应对象,判断状态码后返回重定向响应。代码示例如下:
// middleware.ts import { NextResponse, type NextRequest } from "next/server"; export async function middleware(req: NextRequest) { // 获取后续处理链返回的响应 const response = await NextResponse.next(); // 检测响应状态码为500且当前路径为/company/开头时,执行重定向 if (response.status === 500 && req.nextUrl.pathname.startsWith("/company/")) { return NextResponse.redirect(new URL("/", req.url)); } // 其他情况返回原响应 return response; } // 限定Middleware仅作用于/company/开头的路径(可选优化) export const config = { matcher: "/company/:path*", };
关键说明
- 通过
await NextResponse.next()获取下游处理后的响应,才能读取到实际的状态码。 - 用
NextResponse.redirect()生成重定向响应并返回,会替换原有的500错误响应。 - 配置
config.matcher可以缩小Middleware的作用范围,避免对所有请求执行不必要的检测逻辑。
内容的提问来源于stack exchange,提问作者Vadym Chornyi
相关产品推荐
相关产品推荐

