Next 13 Route Handler无法从请求体获取数据(app/api/auth)
解决Next.js App Router中POST请求体为Readable Stream的问题
在Next.js的App Router(实验性app目录)中,API路由的Request对象遵循Web标准,req.body本身就是Readable Stream,无法直接读取属性,必须手动解析请求体。针对你的场景,修改服务器端代码即可解决:
修正后的服务器端代码
export async function POST(req: NextRequest) { // 解析JSON格式的请求体(异步操作,需加await) const body = await req.json(); console.log(body); // 现在能拿到完整的请求体对象 // 返回JSON格式的响应 return new Response(JSON.stringify(body), { status: 200, headers: { "Content-Type": "application/json", }, }); }
关键修改点说明
- 解析请求体:使用
await req.json()异步解析JSON格式的请求体,这是Web标准Request对象的内置方法,对应你前端设置的Content-Type: application/json。 - 避免重复读取流:Readable Stream只能被读取一次,所以解析后不能再直接返回
req.body,需要用解析后的body对象重新生成响应内容。 - 响应格式匹配:返回响应时明确设置
Content-Type: application/json,确保前端res.json()能正确解析。
额外注意事项
如果你的请求体是表单数据(multipart/form-data),则需要用await req.formData()解析;如果是纯文本,用await req.text(),根据实际Content-Type选择对应的解析方法。
内容的提问来源于stack exchange,提问作者Dajeki
相关产品推荐
相关产品推荐

