axios请求OpenWeatherMap API返回400状态码无法获取数据如何解决?
解决方案
错误根因
- 请求URL未补全
https://协议头,axios无法正确识别请求目标,会将其识别为当前服务的相对路径,导致请求地址完全错误 - URL参数分隔符误用了HTML转义字符
&,实际请求需要使用原生&分隔参数 - 额外问题:axios的返回值是封装后的响应对象,接口实际返回的数据存放在
data属性下,你之前直接返回整个axios对象会包含很多不必要的请求元数据;GET请求成功的状态码应该使用200而非201,错误返回也不要固定写403,要跟随接口实际的错误状态返回更合理。
修复后代码
try { const city = 'london' // 补全协议,修正参数分隔符 const response = await axios.get( `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${process.env.WEATHER_API_KEY}` ) // 调试建议:先打印环境变量确认API密钥是否正常加载 // console.log('API密钥:', process.env.WEATHER_API_KEY) console.log('接口返回数据:', response.data) res.status(200).json(response.data) } catch (error) { console.log('请求错误信息:', error.message) const errStatus = error.response?.status || 500 const errMsg = error.response?.data || error.message res.status(errStatus).json({ error: errMsg }) }
额外校验建议
如果修改后还是报错,可以先把拼接完成的完整URL打印出来,复制到Postman里直接请求,就能快速定位是参数拼接问题还是API密钥/权限问题。
内容的提问来源于stack exchange,提问作者Upendra Dhamala
相关产品推荐
相关产品推荐

