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

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 }
      );
    }
  }
}

关键修改点

  1. 移除了NextApiRequest/NextApiResponse的导入,App Router无需这些Pages Router的类型
  2. 将let data = await req.body替换为const data = await req.json(),这是App Router解析JSON请求体的标准方式
  3. 错误信息中的土耳其语替换为中文(若需保留原语言可自行改回)

前端代码说明

你的前端请求代码是正确的:

  • 设置了Content-Type: application/json请求头
  • 用JSON.stringify(data)处理请求体,符合后端解析要求,无需修改

内容的提问来源于stack exchange,提问作者idiltugba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:07:47