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

Node.js中JSON请求返回undefined时应用崩溃的解决方案咨询

解决方案

你的代码崩溃来自两个未处理的错误场景:

  • 接口返回非合法JSON格式时,JSON.parse()会直接抛出异常
  • 接口返回的JSON结构不符合预期(比如不是数组、数组为空、第一个元素没有body属性)时,链式取值会抛出undefined相关错误

修复方案

你需要通过try...catch捕获解析和取值过程的所有异常,同时增加返回结构的合法性校验,修改后的代码如下:

if(msg.body.startsWith('Track ')){ // 修复原有判断逻辑bug:原代码中判断时slug还未定义,会触发undefined错误
  const str = msg.body;
  const slug = str.substring(str.indexOf("Track") + 6).trim(); // 新增trim处理,避免参数带空格导致查询失败
  const http = require('https');
  const options = {
    host: 'example.com',
    path: '/example/example?id=' + encodeURIComponent(slug) // 新增编码处理,避免slug带特殊字符导致请求路径异常
  };

  const callback = function(response) {
    let str = '';

    response.on('data', function (chunk) {
      str += chunk;
    });

    response.on('error', (err) => {
      msg.reply('请求发起失败,请稍后重试');
    })

    response.on('end', function () {
      try {
        const jsonObject = JSON.parse(str);
        // 新增返回结构合法性校验
        if (!Array.isArray(jsonObject) || jsonObject.length === 0 || !jsonObject[0]?.body) {
          msg.reply(`查询${slug}失败,无有效返回数据`);
          return;
        }
        msg.reply('Current status of ' + slug + ': ' +  jsonObject[0]['body']);
      } catch (err) {
        // 捕获JSON解析、取值过程的所有异常,避免进程崩溃
        msg.reply(`查询${slug}失败,返回数据格式无效`);
      }
    });
  }

  http.request(options, callback).end();
}

关键修改点说明

  • 修复了原有判断逻辑的bug,改为用startsWith识别输入前缀,避免未定义变量错误
  • 增加了参数预处理逻辑,降低无效请求出现的概率
  • 用try...catch包裹JSON解析和取值全流程,所有运行时错误都会被捕获不会导致进程崩溃
  • 新增了返回结构校验逻辑,提前识别不符合预期的返回格式,返回友好提示
  • 错误提示增加了对应查询参数,方便定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:06:01