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

Firestore模拟插入数据报Error running simulation未知错误排查

问题原因排查

你遇到的Error running simulation — An unknown error occurred错误和安全规则内的函数数量无关,完全是规则的语法错误、逻辑漏洞、字段不匹配导致的,具体问题和修复方案如下:

1. 函数名大小写拼写错误

你定义的校验函数名为isValidQuotation(首字母Q大写),但后续调用时写为isValidquotation(首字母q小写)。Firestore安全规则严格区分大小写,找不到对应函数就会抛出未知错误。

  • 修复方案:统一所有调用处的函数名拼写为isValidQuotation

2. 函数调用参数缺失

你定义的isValidStringInput要求传入两个参数:输入内容input和最大长度maxSize,但在isOtherThanQuotations内调用时仅传入了第一个参数,参数不匹配导致执行报错。

  • 修复方案:所有调用isValidStringInput的位置补充第二个参数,比如:
isValidStringInput(request.resource.data.buyerUserId, 200)

3. 字段读取路径错误

3.1 isSelected字段路径错误

isSelected是quotations数组下子对象的字段,不是文档根级字段,你直接读取request.resource.data.isSelected会因为字段不存在报错。

  • 修复方案:删除isSelected函数,将对应校验挪到isValidQuotation内,校验当前传入的数组项的isSelected字段:
function isValidQuotation(item) {
  return quotations()[item].keys().hasAll(
      [
          'title',
          'rate',
          'quantity',
          'measuremntUnit',
          'isSelected',
          'index',
          ])
  && isValidStringInput(quotations()[item].title, 200)
  && isValidNumber(quotations()[item].rate)
  && isValidNumber(quotations()[item].quantity)
  && isValidStringInput(quotations()[item].measuremntUnit, 200)
  && isValidNumber(quotations()[item].index)
  // 校验当前quotation的isSelected字段
  && quotations()[item].isSelected is bool;
}

3.2 字段名拼写不匹配

你规则内校验的buyerPhotoUrl字段,在测试数据中拼写为buyerPhotUrl(少了字母o),会因为读取不到字段报错。

  • 修复方案:统一规则和数据的字段拼写。

4. 校验字段缺失

你在isOtherThanQuotations内加了request.resource.data.createdAt == request.time的校验,但测试数据中没有传入createdAt字段,直接判断相等会报错。

  • 修复方案:要么插入数据时补充createdAt: FieldValue.serverTimestamp(),要么注释掉该校验规则。

5. 类型校验逻辑错误

你写的isValidNumber函数中,matches是字符串独有的方法,如果传入的input是int类型,直接调用matches会抛出类型错误。

  • 修复方案:调整类型判断逻辑:
function isValidNumber(input) {
  return input is int || (input is string && input.matches('^[0-9]+$'));
}

6. 数组校验逻辑冗余(可选优化)

你不需要逐个写下标判断数组每一项是否合规,直接用all方法即可,还可以支持任意长度的数组校验:

// 替换掉原来十几行的下标判断
&& quotations().size() >= 1
// 可自行调整最大长度限制
&& quotations().size() <= 20
&& quotations().all(item => isValidQuotation(item))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:06:03