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

如何修复TypeError: Cannot read properties of undefined (reading '0')错误?

修复Node.js调用Jikan API时的TypeError问题

错误根源

  1. API返回结构不匹配:代码里尝试读取json.results[0],但Jikan v4 API实际返回的角色数据存在data字段中,根本没有results字段,导致json.results为undefined,再读取[0]就触发TypeError。
  2. 未处理空结果场景:即使API返回data数组,当查询不到对应角色时数组会为空,直接取[0]同样会报错。
  3. 字段路径错误:API里的角色图片地址在images.jpg.image_url,不是代码里写的image_url。

修复步骤

  • 将数据读取路径从json.results[0]改为json.data[0],匹配API实际返回结构
  • 增加空结果校验,当data数组为空时抛出查询无结果的提示
  • 修正图片字段的读取路径
  • 给可能为空的字段(比如nicknames)设置默认值,避免输出undefined

完整修正代码

let fetch = require('node-fetch')
let handler = async(m, { conn, text }) => {
  if (!text) throw `Masukkan query!`
  let res = await fetch(global.API('https://api.jikan.moe', '/v4/characters', { q: text }))
  if (!res.ok) throw await res.text()
  let json = await res.json()
  
  // 校验data数组是否存在且有数据
  if (!json.data || json.data.length === 0) throw `Tidak ditemukan karakter dengan nama tersebut!`
  
  let { name, nicknames, url, images, about } = json.data[0]
  // 处理nicknames为空的情况,转为字符串或默认值
  let nicknameStr = nicknames.length > 0 ? nicknames.join(', ') : '无'
  // 获取图片地址
  let imageUrl = images?.jpg?.image_url || ''

  let charaingfo = `💬 *Name:* ${name}
💭 *Nickname:* ${nicknameStr}
🔗 *Link*: ${url}
👤 *About*: ${about || '暂无介绍'}`

  if (imageUrl) {
    conn.sendFile(m.chat, imageUrl, '', charaingfo, m)
  } else {
    conn.reply(m.chat, charaingfo, m)
  }
}
handler.help = ['character <nama>']
handler.tags = ['internet']
handler.command = /^(chara|character)$/i

module.exports = handler

额外注意事项

  • Jikan API有请求限流,频繁调用可能触发429错误,建议增加请求间隔或缓存机制
  • 部分角色的about字段可能为空,代码里已做默认值处理
  • 可以进一步增加字段校验,避免其他可能的undefined读取错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:17:02