[strapi]媒体库失败“无法读取 null 的属性(读取“包含”)

2024-05-13 331 views
1
错误报告 所需的系统信息
  • Node.js 版本:16.19.0
  • NPM版本:8.19.3
  • 斯特拉皮版本:4.6.1
  • 数据库:Sqlite
  • 操作系统:Debian 5.10.92-1
  • 你的项目是Javascript还是Typescript:Javascript
描述错误

与 #12761 类似,单击媒体库会使 Strapi 的所有前端崩溃并输出以下错误:

TypeError: Cannot read properties of null (reading 'includes')
    at le (main.890a972d.js:1376:839)
    at Zl (main.890a972d.js:1744:54681)
    at Hc (main.890a972d.js:1748:9133)
    at Bc (main.890a972d.js:1748:989)
    at qc (main.890a972d.js:1748:917)
    at cu (main.890a972d.js:1748:768)
    at Iu (main.890a972d.js:1746:11068)
    at main.890a972d.js:1744:39503
    at n.unstable_runWithPriority (main.890a972d.js:1776:3795)
    at ta (main.890a972d.js:1744:39281)

这使得 Strapi 完全无法使用。

重现行为的步骤
  1. 登录 Strapi。
  2. 将一些媒体文件上传到媒体库。
  3. 稍后返回并单击菜单中的媒体库。
  4. 查看媒体库 UI 的快速闪现(其中没有任何用户提供的内容)。
  5. 崩溃到白屏。
预期行为

一个可用的媒体库和前端的一些弹性,以防止用户混淆。

截图

图像 图像

回答

2

我在哪里可以获得这方面的支持,至少可以发现并删除有问题的上传内容?我从未遇到过能够像这样崩溃和烧毁的 CMS 媒体上传器,因此我的客户无法启动他们的项目。

9

.false其他详细信息,Strapi 正在目录中生成数百个文件public/uploads。例如:

-rw-r--r-- 1 root      root        57818 Mar  4 08:24 thumbnail_W_Xh_A1_WM_0yiy3_A_Tf_YP_8n_FOWFO_5_T3zdvmww_RST_8115_Cb_Gj_Rr_B_Gh_So4kl7_N5ol_Rdivt_YRA_6_HH_Mg_MX_Dn_UJF_Oz2z_R_Po9jq3_Dl_F9_Kt4yh_H_Yd_ZGPZ_6_Tw_GX_1_R_Ky8_O7i1k56_K4z2z7_e2_Jh_VI_6_Xd_CC_Ni16q6_U_8e65a3f848.false
-rw-r--r-- 1 root      root        57818 Mar  4 08:25 thumbnail_W_Xh_A1_WM_0yiy3_A_Tf_YP_8n_FOWFO_5_T3zdvmww_RST_8115_Cb_Gj_Rr_B_Gh_So4kl7_N5ol_Rdivt_YRA_6_HH_Mg_MX_Dn_UJF_Oz2z_R_Po9jq3_Dl_F9_Kt4yh_H_Yd_ZGPZ_6_Tw_GX_1_R_Ky8_O7i1k56_K4z2z7_e2_Jh_VI_6_Xd_CC_Ni16q6_U_9b05601e11.false
3

该错误有两个部分:

  1. 无论出于何种原因,#12761 中针对 mime 类型的修复尚未完全实现。这意味着在没有设置 mime 类型的情况下,可以在图像上传时创建一条文件记录,其中表mime中的字段为该字段。这当然是不可能的,媒体库上传者应该拒绝图像,通过 imagemagik 处理它并根据其文件类型进行有根据的猜测,或者为该字段提供一个非 NULL 值。filesNULL
  2. Strapi CMS 前端是根据数据完整性的假设构建的,并期望该mime字段始终返回一个值。由于这种假设,这些字段从未经过测试,并且有可能关闭整个 CMS 前端应用程序,这对于非技术用户来说是灾难性的且令人困惑的。

为了正确诊断此问题,我运行了 Strapi 项目的临时克隆,并手动编辑了 CMS 数据库,手动删除表NULL mime中带有字段的所有记录files。该问题立即消失,然后当我从现有记录中手动删除 MIME 类型时又再次出现。

这个问题与 #12761 一样重要且非常相似(甚至可能相同)。作为企业计划客户和与客户合作的开发人员,我们现在已经错过了紧迫的最后期限,这个问题的解决和有关数据完整性的假设都让我深感震惊,我不知道我是否对 Strapi 有信心作为生产网站的长期解决方案。我同样担心这个问题尽管很容易重现,但还是被关闭了。这是如何错过的,#12761 关闭的理由是什么?

7

如果有人在媒体库中遇到此问题,短期解决方案是:

  1. 使您的 Strapi CMS 离线并备份。
  2. 手动登录您的 CMS 数据库
  3. 查找 的所有实例mime NULL

您还可能会找到带有.false文件扩展名的图像文件。这些上传以及随后在数据库中失败的包含导致了 Web UI 的终止(在我们的例子中,是整个 Strapi/Gatsby 构建)。在我们的例子中,我们替换了空mime字段以image/jpeg快速上网,现在我们有了一个可用的 Web UI 和新发明的图像格式: 图像

9

您好:)感谢您提供详细的描述,您可以分享您使用的导致问题的图像之一吗?

6

嘿@shibacomputer,我很抱歉您遇到这些问题。我们显然认为问题已在 #12761 中得到解决,并且您已经证明这是错误的。

为了解决这个问题,我们将执行以下步骤:

  • 我将通过检查此空间中的 null/未定义值来修补 FE,以防止 FE 崩溃(我将努力明天发布此版本,但我不能保证这一点。)
  • 如果您能分享数据库中产生的这些资产之一,我们将不胜感激null- 如果您不想在这里分享,我可以给您我的电子邮件。
  • 从那里我可以与 @Marc-Roig 合作来确定这种情况是如何发生的,以及需要更改代码的哪些部分以阻止将来发生这种情况,这是问题的根源。

我还更新了严重性,以强调我们正在认真对待您的问题。

0

嘿@joshuaellis 和@Marc-Roig,感谢您的快速回复。我的简洁语言是来自我们自己由于这个问题而错过的最后期限,与我们的客户遇到了#12761,迁移,然后再次遇到它。

我已与客户取得联系,以获得与您共享示例资产的许可。您能为我提供一种安全地与您分享此内容的方法吗?

3

您可以将其发送到我的工作电子邮件 josh.ellis@strapi.io,但是您更喜欢通过电子邮件/weTransfer 等方式发送?

5

当然,一旦我得到客户的同意,我就会向您转发一些示例。希望不久!

1

重新打开此问题,以便我们可以使用提供的资产跟踪根本原因 - 如果我们无法重现,此问题将在两周内自动关闭

6

这是一条模板消息

你好@shibacomputer,

感谢您报告此错误,但是根据我们现有的信息,我们无法重现您所描述的问题。您能否创建一个能够在其中重现该问题的新项目,提供重现此问题的明确步骤,并将此新项目上传到新的 GitHub 存储库,或者将其压缩为.zip并上传到此问题?

我们非常感谢您对此的帮助,通过在一个新项目中工作,它将消除任何可能不相关的变量。请注意,status: can not reproduce如果没有任何活动,标记为 的问题将在 14 天内关闭。

谢谢你!

4

@joshuaellis,您好,我刚刚通过电子邮件向您发送了给我们带来问题的示例图像。

8

嘿@shibacomputer,我们已经审核了您的图像,但无法重现您在使用这些资产时遇到的问题。

当无法在服务中计算时,我们将添加一个默认的 mime 类型,以确保没有空值传递到数据库,这意味着使用 API 的人不会受到影响。mime当我们从数据库获取数据时,我们还将通过添加默认值而不是空字符串来改进管理。

这些位于我们的 JIRA 板上,因为我们解决了您面临的直接错误,所以我将关闭此问题。

如果您的客户继续面临这些问题,我建议您联系支持人员,因为您是企业客户?

7

我现在也开始遇到这个问题了。我似乎无法让它消失。这个问题或许应该重新讨论。我现在使用的是 4.7.1。

4

删除 my node_modulesdist等,然后在 npm 上使用最新的实验版本似乎已经解决了这个问题。