You need to enable JavaScript to run this app. Node.js使用fetch携带JSON参数请求Edamam食品营养API报实体解析错误的修改方法
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用fetch携带JSON参数请求Edamam食品营养API报实体解析错误的修改方法

调用Edamam营养API报解析错误的修复方案
  • 核心报错原因:请求体被重复序列化,导致格式完全不符合接口要求。

你传入postData的myFood本身已经是手动拼接的合法JSON字符串,但在postData内部又执行了一次JSON.stringify(data),相当于把字符串再转义一层,最终发送的请求体变成了类似"{\"ingredients\": ...}"的无效格式,服务端自然无法解析,这就是触发"Entity could not be parsed"报错的直接原因。

具体修改方案(二选一即可)

方案1:(推荐)将硬编码JSON字符串改为原生JS对象

保留postData现有JSON.stringify逻辑,仅修改调用时的入参写法:

// 替换原来的字符串形式myFood
const myFood = {
  ingredients: [
    {
      quantity: 2,
      measureURI: "http://www.edamam.com/ontologies/edamam.owl#Measure_ounce",
      foodId: "food_akjf74ibll2id8aqb8xbha4t4axl"
    }
  ]
};

postData(url, myFood, res)
  .then((data) => res.send(data))
  .catch((error) => console.log(error));

方案2:保留现有字符串入参,删除postData内的序列化逻辑

如果坚持使用手动拼接JSON字符串的写法,直接修改postData函数的body配置:

async function postData(url = '', data, res) {
  console.log(data);
  const response = await fetch(url, {
    method: 'POST',
    cache: 'no-cache',
    credentials: 'same-origin',
    headers: {
      'Content-Type': 'application/json'
    },
    // 移除JSON.stringify,直接传入已有的JSON字符串
    body: data
  });
  return response.json();
}

额外注意事项

  • 优先选择方案1,原生JS对象写法不需要手动处理JSON转义,可维护性更高,不容易出现格式错误。
  • 确认请求体里的必填字段完整,比如measureURI的取值、foodId的格式是否符合Edamam接口的规范。
  • Node.js环境下的fetch请求无需配置credentials: 'same-origin',该配置仅适用于浏览器端同源请求,不影响本次调用但属于冗余配置,可按需移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 00:15:04