Edamam Meal Planning API返回401错误排查(凭证有效)
排查Edamam Meal Planning API 401认证错误
核心问题:缺少API密钥(app_key)的传递
Edamam的Meal Planning API要求同时提供app_id和app_key两个凭证才能完成认证,你的代码仅在URL中包含了app_id,完全没有传递app_key,这是导致401错误的直接原因。
修正步骤
确认.env文件配置
确保你的.env文件中同时存在APP_ID和APP_KEY两个变量,格式如下:APP_ID=你的实际app_id APP_KEY=你的实际app_key修改Axios请求,添加app_key参数
推荐使用Axios的params选项传递认证参数,代码更整洁:
以下是修正后的完整代码:
import express from "express" import axios from "axios" import cors from "cors" import "dotenv/config" const app = express() const PORT = process.env.PORT || 5000 app.use(cors()) app.get('/test', async (req, res) => { try { const response = await axios.post( `https://api.edamam.com/api/meal-planner/v1/${process.env.APP_ID}/select`, { "size": 2, "plan": { "accept": { "all": [ { "health": ["VEGAN"] }, { "cuisine": ["Mediterranean"] } ] } } }, { params: { app_key: process.env.APP_KEY } } ); res.send(response.data) // Axios响应数据存放于data字段,而非body } catch (ex) { res.status(ex.response?.status || 500).send({ message: ex.message, errorDetails: ex.response?.data }) } }) app.listen(PORT,() => { console.log(`server is listening to port ${PORT}`) })
额外排查点
- 验证环境变量加载:在代码开头添加
console.log(process.env.APP_ID, process.env.APP_KEY),确认两个变量能正常读取到值。 - 核对
app_key拼写:确保和Edamam控制台中的密钥完全一致,注意是APP_KEY而非其他变体。 - 确认接口请求方式:
/select接口确实要求POST请求,这部分你的代码没有问题。
内容的提问来源于stack exchange,提问作者Nathan Groth
相关产品推荐
相关产品推荐

