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
相关产品推荐
相关产品推荐

