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

NodeJS调用OpenWeatherMap API遇401错误求助

问题分析与修正方案

问题核心原因

你遇到的401未授权错误,主要由以下几点导致:

  1. 鉴权方式错误:OpenWeatherMap API不支持Bearer Token请求头鉴权,仅接受通过appidURL参数传递密钥的方式。
  2. 环境变量读取异常:你的.env文件中API_KEY = XX_API_KEY_XX的写法包含空格,会导致读取到的密钥自带多余空格,直接引发鉴权失败。
  3. 额外无效参数:/weather接口不需要limit=5参数(该参数属于/find接口),虽不直接触发错误,但属于冗余配置。

修正步骤

1. 修复.env文件格式

将密钥定义改为无空格的标准格式,避免读取时携带多余字符:

API_KEY=XX_API_KEY_XX

2. 修正weather.js请求逻辑

删除错误的Bearer请求头,改用官方要求的appid参数传递密钥,同时移除无效参数并恢复动态获取城市名的逻辑:

const express = require("express");
const axios = require("axios");
const router = express.Router();
require("dotenv").config();

const apiKey = process.env.API_KEY;

router.get("/weather", async (req, res) => {
  // 从请求参数获取城市名,默认值设为cochin
  const city = req.query.city || `cochin`;
  try {
    // 构造符合官方要求的请求URL
    const url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}`;
    const response = await axios.get(url);
    const weatherData = response.data;

    res.json(weatherData);
  } catch (error) {
    console.error("获取天气数据失败", error);
    // 返回更精准的错误信息
    res.status(error.response?.status || 500).json({ 
      error: `获取天气数据失败: ${error.response?.data?.message || error.message}` 
    });
  }
});

module.exports = router;

3. 额外验证事项

如果修正后仍报错,请确认:

  • API密钥已在OpenWeatherMap官网正确生成并激活(新密钥可能需要10-15分钟生效)
  • 密钥未超出免费调用额度
  • 请求的城市名称拼写正确(支持英文或拼音,大小写不敏感)

测试请求示例

启动服务后,可通过以下URL测试接口:

http://localhost:3000/api/weather?city=cochin

调用成功后即可得到你期望格式的天气JSON数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:48:24