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

Next.js API接口返回响应后,客户端无法读取body中的message字段

Next.js接口响应体读取问题解决方案

问题本质

你看到的body: (...)是因为fetch返回的Response对象的body是可读流,不会自动解析成JSON,必须主动调用解析方法才能读取里面的内容。另外你的代码还有两处细节错误需要修正。

1. 修正客户端代码:解析响应体并匹配接口路径

首先,fetch的路径要和服务端文件对应(你之前写的/api/mbti/result和服务端的/api/calculation.js不匹配),然后调用res.json()解析响应体,才能拿到message字段:

fetch('/api/calculation', {
   method: 'POST',
   headers: {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': 'application/json',
   },
   body: JSON.stringify(values),
}).then((res) => {
   return res.json(); // 解析JSON格式的响应体
}).then((data) => {
   console.log(data.message); // 这里就能直接拿到返回的message了
   if (data.status === 200) {
      resetForm();
   }
}).catch((err) => {
   console.error('请求出错:', err);
});

2. 修正服务端代码:规范状态码与逻辑终止

服务端有两个小问题:

  • 状态码要传数字,不能传字符串(res.status('403')改成res.status(403))
  • 非POST请求判断后要终止函数,不然后面的响应代码还会执行,导致逻辑混乱
const handler = (req, res) => {
  if (req.method !== 'POST') {
    return res.status(403).json({
      status: 403,
      message: 'Forbidden',
    });
  }

  // 这里写你的计算逻辑

  // 用res.json()返回JSON,自动设置正确响应头
  return res.status(200).json({ status: 200, message: 'Hello from Next.js!' });
};

export default handler;

验证效果

修改完成后,客户端就能正常打印出服务端返回的message内容,表单重置逻辑也能正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:20:35