You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:40:23