当我的默认数组为空时,为什么猫鼬用空字符串调用验证器?

罗杰·希思柯特

我已将此行添加到我的模式中...

recentTags: {type:[String], default: [], validate: tagRegex}

这是我的标签验证正则表达式...

tagRegex: /^[a-z0-9#]+( *[a-z0-9\\/:\-()[\].?#]+)*$/

注意:它不允许使用空字符串,也不允许使用空字符串,因为这不是有效的标签名称。

所以我的问题是,所有接触该架构的测试现在都因Mongo错误而失败...

ValidationError: User validation failed: recentTags: Validator failed for path `recentTags` with value ``

我不明白为什么它要尝试运行我的验证器,为什么在值数组为空时会这样做呢?为什么要传递一个空字符串?

请注意,在运行测试之前,我一直很小心地重建我的测试数据库,并等待所有索引完成,其余测试工作正常。我的Mongo版本是3.6.8,我的Mongoose版本是^ 5.9.25,所有版本都在节点v14.11.0上运行

简洁

我相信验证器会将正则表达式作为一个整体应用于整个字符串数组,并且在应用正则表达式时将隐式类型转换为字符串。空数组将隐式转换为空字符串""


可能的解决方案

根据我的理解,您似乎正在验证数组中的每个单独元素,而不是整个数组值。数组类型可以使用元素级验证器更复杂地指定。

这是更改的示例:

const Tags = model("tags", new Schema(
    {
        recentTags: {
            type: [{
                type: String,
                validate: tagRegex,
            }],
            default: [],
        },
    },
));

以下是一些带有此验证的插入示例:

// valid, uses the default value
await Tags.insertMany([{}]);
// also valid, no elements are here so no validation is done
await Tags.insertMany([{recentTags: []}])
// also valid, the element passes the regex
await Tags.insertMany([{recentTags: ["test"]}])

// not valid, the element does not pass the regex
await Tags.insertMany([{recentTags: [""]}])

请参阅有关数组架构类型的文档:https : //mongoosejs.com/docs/schematypes.html


旁注

您可能还希望验证recentTags实际上是一个数组,或者使用更复杂的自定义验证错误消息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我用\\ s split()我的字符串时,为什么我的单词是一个空字符串?

来自分类Dev

为什么我的来自猫鼬文档的字符串数组的deepEqual失败?

来自分类Dev

当我尝试添加拆分后的字符串时,为什么会得到空字符串?

来自分类Dev

猫鼬传递空字符串

来自分类Dev

猫鼬-为什么我的验证器方法失败?

来自分类Dev

猫鼬:分配类型为“字符串数组”的字段

来自分类Dev

当我在localNotification中解开字符串数组时,为什么返回nil?

来自分类Dev

为什么当我使用计数结果是空字符串?

来自分类Dev

为什么用Go接口{}作为参数,当我用字符串调用func时,它会强制转换一个alloc / ns吗?

来自分类Dev

为什么我的mysql默认密码不是空字符串

来自分类Dev

为什么我的字符串数组变为空-C

来自分类Dev

猫鼬-保存字符串数组

来自分类Dev

猫鼬-枚举字符串数组

来自分类Dev

为什么多维数组中的空字符串文字会衰减为空指针?

来自分类Dev

当我使用字符串文字时,mongoose findById起作用,但是当我引用Object的属性时,猫鼬findById不起作用

来自分类Dev

我的Ajax调用将空字符串对象传递给JSonResult Action,为什么?

来自分类Dev

当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

来自分类Dev

为什么%(Identity)扩展为空字符串?

来自分类Dev

为什么%(Identity)扩展为空字符串?

来自分类Dev

为什么包含空字符串的列表为真?

来自分类Dev

为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

来自分类Dev

为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

来自分类Dev

当我将这些int var链接为字符串时,为什么要添加int var?

来自分类Dev

为什么在C ++中当我用'+'合并字符串时不合并但删除字符串的第一个字符

来自分类Dev

猫鼬匹配验证器即使字符串匹配也给出验证错误

来自分类Dev

验证字符串是否为正数,空/空字符串

来自分类Dev

当我尝试打印封面数组时,为什么我的输出为空?

来自分类Dev

如果我将“填充”(猫鼬)与空字符串一起使用,会发生什么情况?我想创建一个抽象函数来从猫鼬获取数据

来自分类Dev

当我尝试通过js解析时,第一个元素为空字符串

Related 相关文章

  1. 1

    当我用\\ s split()我的字符串时,为什么我的单词是一个空字符串?

  2. 2

    为什么我的来自猫鼬文档的字符串数组的deepEqual失败?

  3. 3

    当我尝试添加拆分后的字符串时,为什么会得到空字符串?

  4. 4

    猫鼬传递空字符串

  5. 5

    猫鼬-为什么我的验证器方法失败?

  6. 6

    猫鼬:分配类型为“字符串数组”的字段

  7. 7

    当我在localNotification中解开字符串数组时,为什么返回nil?

  8. 8

    为什么当我使用计数结果是空字符串?

  9. 9

    为什么用Go接口{}作为参数,当我用字符串调用func时,它会强制转换一个alloc / ns吗?

  10. 10

    为什么我的mysql默认密码不是空字符串

  11. 11

    为什么我的字符串数组变为空-C

  12. 12

    猫鼬-保存字符串数组

  13. 13

    猫鼬-枚举字符串数组

  14. 14

    为什么多维数组中的空字符串文字会衰减为空指针?

  15. 15

    当我使用字符串文字时,mongoose findById起作用,但是当我引用Object的属性时,猫鼬findById不起作用

  16. 16

    我的Ajax调用将空字符串对象传递给JSonResult Action,为什么?

  17. 17

    当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

  18. 18

    为什么%(Identity)扩展为空字符串?

  19. 19

    为什么%(Identity)扩展为空字符串?

  20. 20

    为什么包含空字符串的列表为真?

  21. 21

    为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

  22. 22

    为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

  23. 23

    当我将这些int var链接为字符串时,为什么要添加int var?

  24. 24

    为什么在C ++中当我用'+'合并字符串时不合并但删除字符串的第一个字符

  25. 25

    猫鼬匹配验证器即使字符串匹配也给出验证错误

  26. 26

    验证字符串是否为正数,空/空字符串

  27. 27

    当我尝试打印封面数组时,为什么我的输出为空?

  28. 28

    如果我将“填充”(猫鼬)与空字符串一起使用,会发生什么情况?我想创建一个抽象函数来从猫鼬获取数据

  29. 29

    当我尝试通过js解析时,第一个元素为空字符串

热门标签

归档