Next.js 13使用Middleware遇TypeError报错,求问题排查与解决
问题描述
在Next.js 13项目中,于根目录(与pages文件夹同级)创建middleware.js文件,代码如下:
import { NextResponse } from 'next/server' export function middleware(request) { return NextResponse.redirect(new URL('/about-2', request.url)) }
启动本地服务时触发如下错误:
error - Error [TypeError]: Class extends value undefined is not a constructor or null at ../../node_modules/.pnpm/undici@5.11.0/node_modules/undici/lib/fetch/file.js (evalmachine.<anonymous>:5724:19) at __require (evalmachine.<anonymous>:14:50) at ../../node_modules/.pnpm/undici@5.11.0/node_modules/undici/lib/fetch/formdata.js (evalmachine.<anonymous>:5881:49) at __require (evalmachine.<anonymous>:14:50) at ../../node_modules/.pnpm/undici@5.11.0/node_modules/undici/lib/fetch/body.js (evalmachine.<anonymous>:6094:35) at __require (evalmachine.<anonymous>:14:50) at ../../node_modules/.pnpm/undici@5.11.0/node_modules/undici/lib/fetch/response.js (evalmachine.<anonymous>:6510:49) at __require (evalmachine.<anonymous>:14:50) at <unknown> (evalmachine.<anonymous>:11635:30) at requireFn (file://C:\Users\username\Desktop\Nextjs-Blog\node_modules\next\dist\compiled\edge-runtime\index.js:1:7079) { middleware: true }
该代码在Next.js 12项目中可正常运行,询问当前代码是否存在问题。
问题分析与解决
代码本身无语法问题,报错是由于Next.js 13与当前使用的undici@5.11.0版本存在兼容性冲突。Next.js 13的Edge Runtime对undici版本有特定要求,旧版本会触发类继承未定义的错误。
解决步骤:
- 升级undici到兼容版本,执行命令:
pnpm update undici - 若升级后问题仍存在,删除
node_modules和pnpm-lock.yaml文件,重新安装依赖:rm -rf node_modules pnpm-lock.yaml pnpm install - 同步升级Next.js到最新稳定版,规避版本自身潜在bug:
pnpm update next
补充说明:Next.js 13的Middleware写法与12基本一致,若项目使用Pages Router,当前代码完全符合规范,无需调整。
内容的提问来源于stack exchange,提问作者Will Doan
相关产品推荐
相关产品推荐

