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

Node.js调用API GET请求返回undefined问题排查求助

问题排查与修复方案

核心问题原因

  • 异步输入读取逻辑错误:Node.js内置readline模块的行读取为异步事件驱动逻辑,你当前使用同步调用readLine().trim()的方式无法正确拿到输入值,会直接返回undefined
  • 接口返回字段取值错误:接口返回的书籍信息存储在返回体的data数组中,你直接从返回根节点result读取bookName、year字段必然为空
  • 可选优化点:请求参数未做编码,若输入包含特殊字符会导致请求URL非法;JSON解析未加异常捕获,返回非JSON格式时会直接崩溃

修复代码

1. 输入流读取逻辑封装(以标准Node.js readline模块为例)

const readline = require('readline');
const https = require('https');
// 这里假设ws是你已经实例化的可写流对象
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// 封装为异步方法,等待用户输入完成
function readLineAsync() {
  return new Promise(resolve => {
    rl.once('line', (input) => {
      resolve(input.trim());
    });
  });
}

2. getBooksInfo方法优化

function getBooksInfo(name) {
  // 对输入参数编码,防止特殊字符导致URL非法
  const url = `https://test/books?name=${encodeURIComponent(name)}`;
  return new Promise(function (resolve, reject) {
    https.get(url, res => {
      res.setEncoding("utf8");
      let body = "";
      res.on("data", data => {
        body += data;
      });
      res.on("end", () => {
        try {
          // 新增异常捕获,防止返回非JSON内容时程序崩溃
          const parsedBody = JSON.parse(body);
          resolve(parsedBody);
        } catch (e) {
          reject(e);
        }
      });
      res.on("error", (e) => {
        reject(e);
      });
    });
  });
}

3. storeInfo方法修正

async function storeInfo() {
  // 调用异步输入读取方法拿到用户输入
  const name = await readLineAsync();
  const result = await getBooksInfo(name);
  // 改为判断data数组是否为空
  const isEmpty = !result.data || !result.data.length;
  if (isEmpty) {
    ws.write('We don\'t have this book in our database');
  } else {
    // 从data数组中取第一条书籍信息
    const targetBook = result.data[0];
    ws.write(`Book Name: ${targetBook.bookName}`);
    ws.write(`Year: ${targetBook.year}\n`);
  }
  // 输入流使用完成后关闭
  rl.close();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:57:03