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

Node.js中https请求内更新对象外部不生效问题及代码修正需求

问题原因

https.get 是异步操作,你的代码在所有请求还未完成、还没往result里填充数据时,就执行了res.json(result),所以前端拿到的是空对象。另外,原代码只监听了data事件,没考虑响应数据可能分段返回的情况,直接解析单次data可能导致JSON解析错误。

修正后的代码
app.post("/getWeather", async (req, res, next) => {
    console.log(req.body.cities);
    const cities = req.body.cities;
    const result = {};

    // 封装单个城市的天气请求为Promise
    const fetchWeather = (city) => {
        return new Promise((resolve) => {
            // 注意:替换url中的城市占位符(比如把{city}换成实际城市名),匹配你的API格式
            const cityUrl = url.replace('{city}', city);
            https.get(cityUrl, (response) => {
                let rawData = '';
                // 拼接分段返回的响应数据
                response.on("data", (chunk) => {
                    rawData += chunk;
                });
                // 响应结束后解析完整数据
                response.on("end", () => {
                    try {
                        const wdata = JSON.parse(rawData);
                        const temperature = wdata.main.temp;
                        resolve({ city, temp: temperature });
                    } catch (err) {
                        console.error('数据解析失败:', err);
                        resolve({ city, temp: "NA" });
                    }
                });
            }).on("error", (err) => {
                console.log('请求失败:', err);
                resolve({ city, temp: "NA" });
            });
        });
    };

    // 并行发起所有请求,等待全部完成后整理结果
    try {
        const weatherResults = await Promise.all(cities.map(city => fetchWeather(city)));
        weatherResults.forEach(item => {
            result[item.city] = item.temp;
        });
        return res.json(result);
    } catch (err) {
        console.error('整体请求处理失败:', err);
        return res.status(500).json({ error: '获取天气数据失败' });
    }
});
关键修改点
  • 用async/await + Promise.all处理异步请求,确保所有请求完成后再返回结果
  • 封装每个城市的请求为Promise,统一处理成功、失败、解析错误的情况
  • 监听response的end事件,拼接所有分段数据后再解析JSON,避免因数据不完整导致的解析错误
  • 增加异常捕获逻辑,返回更友好的错误响应

内容的提问来源于stack exchange,提问作者ARGHYA DEEP PAL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:07:24