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

Node.js中HTTPS请求未执行问题求助

问题分析与解决方案

Hey there, let's break down what's going wrong here and fix it step by step!

核心问题:异步操作与同步返回不匹配

你的代码里最关键的bug是**https.get是异步操作,但getUserData函数是同步返回结果**。当函数执行到return json_data这一行时,HTTP请求还在后台跑着呢,json_data还是你初始化的空对象{},所以typeof输出object完全是这个阶段的结果——你返回的根本不是请求到的数据,而是一开始的空对象。

次要问题:数据拼接错误

另外,在res.on("data")的回调里,你写了data = in_data.toString(),这会导致每次收到数据片段时直接覆盖之前的内容。HTTP响应的data事件可能会多次触发(大体积响应会被分片传输),正确的做法应该是data += in_data.toString()来拼接所有片段。

修复方案:用Promise处理异步逻辑

要解决异步返回的问题,我们可以把函数改成返回一个Promise,这样就能等待请求完成后再拿到正确结果。下面是修正后的完整代码:

const https = require("https");

function getUserData(username) {
  return new Promise((resolve, reject) => {
    try {
      const req = https.get(`https://xteamtreehouse.com/${username}.json`, res => {
        let data = "";

        if (res.statusCode === 200) {
          res.on("data", in_data => {
            // 正确拼接分片数据
            data += in_data.toString();
          });

          res.on("end", () => {
            // 请求完成,返回最终数据
            resolve(data);
          });
        } else {
          reject(new Error(`An ${res.statusCode} error occurred!`));
        }
      });

      req.on("error", e => {
        reject(new Error(e.message));
      });
    } catch (e) {
      reject(new Error(e.message));
    }
  });
}

// 用async/await调用(需在async函数内执行)
async function fetchUserData() {
  try {
    const result = await getUserData("chalkers");
    console.log(typeof result); // 现在会输出预期的"string"
    console.log(result); // 可以查看完整的响应数据
  } catch (err) {
    console.error(err.message);
  }
}

fetchUserData();

为什么这样能解决问题?

  • Promise让我们可以把异步操作的结果延迟到操作完成后再返回,彻底避免了同步函数提前返回初始值的问题。
  • 如果你不习惯async/await,也可以用.then()和.catch()来处理结果和错误:
getUserData("chalkers")
  .then(result => {
    console.log(typeof result); // 输出"string"
  })
  .catch(err => {
    console.error(err.message);
  });

这样修改后,你的代码就能正确等待HTTPS请求完成,拿到预期的响应数据,typeof也会输出string了。

内容的提问来源于stack exchange,提问作者Developer K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:06:10