TypeError: Cannot read properties of null (reading ‘find’)

这个报错出现在管理员打开 Open WebUI 后台的 Admin Settings → Images 页面时。ComfyUI 工作流节点配置( COMFYUI_WORKFLOW_NODES 或 IMAGES_EDIT_COMFYUI_WORKFLOW_NODES )缺失、为 null 或不是数组时

快速结论:这个报错出现在管理员打开 Open WebUI 后台的 Admin Settings → Images 页面时。ComfyUI 工作流节点配置(COMFYUI_WORKFLOW_NODES 或 IMAGES_EDIT_COMFYUI_WORKFLOW_NODES)缺失、为 null 或不是数组时,onMount 中未加保护的 .find() 调用会抛异常,导致整个 Images 标签页渲染失败。优先排查数据库 config 表中这两项的实际存储值。

适用环境:Issue 中确认的环境为 Open WebUI v0.12.4(dev 分支 7b303cf49 上同样存在)、Docker 部署、Ubuntu 24.04、Docker 27.x;浏览器为 Chromium 系,但因异常发生在客户端 JS 的 onMount 中,问题与浏览器无关。未涉及 Ollama。

最快修复方案:暂无确认的一步修复方案。Issue 中作者通过 sqlite3 手工修复 config 表中损坏的记录才恢复了该页面;代码层面的 Array.isArray 守卫修复尚处于提议阶段,未合并。

注意事项:直接改数据库属于高风险操作,操作前务必先备份。Issue 中列出的源码修复只是作者的提议(PR #33191 已被关闭),在合并发布前不能视为官方方案;作者也未在 dev 构建上做过浏览器实测。

问题场景

用户使用 Open WebUI 的 ComfyUI 图像引擎,进入 Admin Settings → Images 时标签页打不开,弹出错误 toast,浏览器控制台报错。触发条件是数据库中保存的 COMFYUI_WORKFLOW_NODES 或 IMAGES_EDIT_COMFYUI_WORKFLOW_NODES 配置行缺失、值为 null,或是非数组结构。由于异常在 onMount 阶段抛出,整个标签页无法渲染,管理员原本用来修改这些配置的字段也一并不可用,实例因此在 UI 层面卡死。

报错原文

Uncaught (in promise) TypeError: Cannot read properties of null (reading 'find')
    at Images.svelte:269

原因分析

最可能的原因是 src/lib/components/admin/Settings/Images.svelte 中对两个配置键的访问没有做类型校验。按 Issue 给出的 dev 版源码,第 269 行与第 303 行直接调用 .find():

const n = config.COMFYUI_WORKFLOW_NODES.find((n) => n.type === node.type) ?? node;

config.IMAGES_EDIT_COMFYUI_WORKFLOW_NODES.find((n) => n.type === node.type) ?? node;

当配置值为 null 时,.find() 即在 null 上调用,抛出 TypeError。同一路径上还有两处未加保护的访问会放大问题:某行缺少 node_ids 时,n.node_ids.join(',') 会抛错;saveHandler 中调用 node.node_ids.trim(),当该值本身已是数组(恰是该函数回写的数据结构)时同样会抛错。以上判断均来自 Issue 作者对源码的阅读和线上复现。

环境排查

  • Open WebUI 版本:确认是否为 v0.12.4 或 dev 分支 7b303cf49 附近版本。
  • 部署方式:Docker(Issue 中为 Docker 27.x)。
  • 系统:Ubuntu 24.04。
  • 图像引擎是否为 ComfyUI,以及 Admin Settings → Images 是否可打开。
  • 浏览器控制台是否有 TypeError: Cannot read properties of null (reading 'find'),报错位置是否指向 Images.svelte 第 269 或 303 行。
  • 数据库 config 表中 images.comfyui.workflow.nodes 等相关键的值为 null、缺失还是非数组。

解决步骤

  1. 先备份 Open WebUI 的数据库文件或数据卷,避免改坏后无法回滚。
  2. 进入容器或宿主机上的 Open WebUI 数据目录,用 sqlite3 打开数据库。
  3. 检查 config 表中 ComfyUI 工作流节点相关记录,确认是否存在值为 'null'、缺失或结构非数组的行。
  4. 参考 Issue 中的复现语句定位目标键(示例为把值置为 null):
    UPDATE config SET value = 'null' WHERE key = 'images.comfyui.workflow.nodes';
  5. 将被破坏的值修正为合法的 JSON 数组(例如 [] 或原本正确的节点映射),使页面能以空/默认映射状态加载。
  6. 保存后刷新页面,重新打开 Admin Settings → Images。可优先尝试从 UI 中重新保存一次配置,让 saveHandler 回写为规范结构。
  7. 如需根治,可关注上游对 Images.svelte 的修复:保护两个数组访问(Array.isArray)、在 join 前为缺失的 node_ids 提供 [] 默认值、保存时同时接受字符串与数组形式的 node_ids。该修改尚未合并,属于提议方案。

验证方法

刷新页面后 Admin Settings → Images 能正常渲染,不再弹出错误 toast;浏览器控制台不再出现 TypeError: Cannot read properties of null (reading 'find');在页面中修改并保存节点映射后,重启或重新加载仍可正常打开该标签页,且 config 表中的值保持为合法数组结构。

参考来源

open-webui/open-webui #33192

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30146

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注