NextJS路由中req.body返回ReadableStream问题求助
问题解决:Next.js路由中req.body返回ReadableStream而非请求数据
问题根源
你混淆了Next.js App Router与Pages Router的请求处理逻辑:
- App Router的
route.js中,POST函数接收的参数是NextRequest类型,而非Pages Router的NextApiRequest NextRequest的body属性是ReadableStream对象,不能直接获取数据,必须通过对应的方法解析
修正后的路由代码
import dbConnect from "@/lib/dbConnect"; import User from "@/models/User"; import { NextResponse, NextRequest } from "next/server"; export async function POST(req: NextRequest) { await dbConnect(); // 正确解析JSON请求体 const data = await req.json(); console.log(data); // 现在会输出预期的请求数据 try { const user = new User(data); await user.save(); return NextResponse.json({ user }, { status: 201 }); } catch (error) { console.log("here 3"); if (error instanceof Error) { return NextResponse.json( { error: error.message || "未知错误" }, { status: 500 } ); } else { return NextResponse.json( { error: "未知错误" }, { status: 500 } ); } } }
关键修改点
- 移除了
NextApiRequest/NextApiResponse的导入,App Router无需这些Pages Router的类型 - 将
let data = await req.body替换为const data = await req.json(),这是App Router解析JSON请求体的标准方式 - 错误信息中的土耳其语替换为中文(若需保留原语言可自行改回)
前端代码说明
你的前端请求代码是正确的:
- 设置了
Content-Type: application/json请求头 - 用
JSON.stringify(data)处理请求体,符合后端解析要求,无需修改
内容的提问来源于stack exchange,提问作者idiltugba
相关产品推荐
相关产品推荐

