如何在Next.js 13路由处理器中解析POST请求的ReadableStream?
问题解决:Next.js 13路由处理器解析POST请求体错误
核心问题
你错误地直接访问req.body(类型为ReadableStream<Uint8Array> | null),并尝试在该流对象上调用json()方法——但json()是NextRequest实例的方法,并非req.body的方法,这才导致了类型错误。
修正后的POST请求处理器代码
import { NextRequest, NextResponse } from 'next/server'; import prisma from '@/lib/prisma'; // 替换为你的Prisma客户端实际路径 // 确保该接口与请求体、Prisma模型字段匹配 interface clientToCreate { // 示例字段,根据你的实际模型定义修改 name: string; email: string; } export async function POST(req: NextRequest) { // 调用NextRequest实例的json()方法解析请求体 const clientData: clientToCreate = await req.json(); try { const data = await prisma.client.create({ data: clientData, }); return NextResponse.json(data); } catch (e) { console.error(e); // 自定义错误响应比NextResponse.error()更清晰 return NextResponse.json({ error: '客户端创建失败' }, { status: 500 }); } }
额外注意事项
- 确保
clientToCreate接口的字段与PrismaClient模型的可创建字段完全对应,避免类型不兼容问题。 - 你的请求构造代码和Postman的请求头设置(
Content-Type: application/json)是正确的,无需修改。 NextResponse.error()默认返回500状态,但自定义JSON响应能更明确地告知前端错误原因。
内容的提问来源于stack exchange,提问作者Nick Gr
相关产品推荐
相关产品推荐

