把报错丢进来,得到原因、最小修复和验证方法

贴上报错和出问题的那段代码,输出人话解释、最可能的几个原因,以及每个原因怎么验证

dev common 单次生成 输出:markdown 收藏

① 输入长这样

报错信息
TypeError: Cannot read properties of undefined (reading 'map')
    at renderList (list.js:42:18)
    at HTMLDivElement.dispatch (app.js:9:1)
相关代码
async function load() {
  const res = await fetch('/api/items');
  renderList(res.data.items);   // ← 报错在这行附近
}
function renderList(items) {
  return items.map(i => i.name).join(',');
}
环境信息(可选)
Chrome 131

② 输出长这样

预跑示例 · 已缓存

人话解释 items 是 undefined,所以调 .map() 的时候崩了。也就是说 res.data.items 这一串里,某一层是空的。

按可能性排序的原因

  1. 接口返回的不是这个结构(最常见):fetch 拿到的 res 是响应对象,不是数据; 要先 await res.json(),然后再取 json.data.items。
  2. 字段名不一致:后端可能返回 list / records 而不是 items。
  3. 接口出错但没处理:后端 500 或返回错误对象,data 层不存在。

怎么验证(按顺序,1 分钟能定位)

  1. 在 renderList 前加一行:console.log(res, await res.clone().json()) —— 先看清真实结构;
  2. 打开浏览器 Network 面板,找到 /api/items,看响应体到底是数组还是 {code, data:{list}};
  3. 如果确实是第 1 类原因,改成 const json = await res.json(); + renderList(json.data?.items ?? [])。

最小修复

const res  = await fetch('/api/items');
const json = await res.json();          // ← 关键:先解出 JSON
renderList(json?.data?.items ?? []);    // ← 兜底空数组,没数据也不崩

同类坑

  • res.data 是 axios 的写法,用原生 fetch 时没有这一层(两者混用最容易出这个错);
  • 加上 ?? [] 只是不让它崩,真正的问题仍要查清——空数组会把接口异常掩盖成「没有数据」。

这是官方预跑的示例结果,不含你的任何内容;换成你的数据请见下方。

③ 换成你的信息

运行要用你自己的内容调一次 AI,所以需要登录(登录免费)。登录后余额为 0,会被引导开通 VIP1 探索者(100 元/年 = 12000 积分)。积分按实际用量扣,每步跑完才结算。

登录后运行 →

④ 配方原文

完整提示词仅 VIP 会员可见;开通后可直接复制,一键套用到任意 AI 工具。

你是帮人排查程序问题的资深工程师。请根据报错与代码给出诊断。

要求:
1. 先用**人话**解释这个报错到底在说什么(一句话)。
2. 列出最可能的 2~3 个原因,**按可能性排序**,每个原因要指向代码里的具体行/字段。
3. 给出一段「怎么验证」的步骤:用最少几步就能确认 …

配方原文仅 VIP 会员可见

开通会员后可直接复制完整提示词,一键套用到任意 AI 工具,免去自己填变量的麻烦。

登录后查看 →

⑤ 实践中的坑

  • !只贴一行报错信息,得到的往往是"可能是 A 也可能是 B";把栈的前几行一起贴上,命中率高得多
  • !代码贴「出问题的那一段」比贴整个文件好——整文件会让它把注意力分散到无关的地方
  • !它给的修复要自己跑一遍再提交;尤其是涉及数据兜底(?? [])的改动,容易把真问题盖住

⑥ 常见问题

它能直接帮我改好项目里的代码吗? +

它只给「最小修复」的建议片段;实际改动、回归测试仍要你自己做,别不看就提交。

会不会瞎编不存在的 API? +

提示词里明确要求「不确定就写需要你确认」;但涉及较冷门的库时仍可能记错,要对着官方文档核一遍。

前端后端报错都行吗? +

都行。把语言、框架和版本写进「环境信息」能明显提高准确率。