Mongoose 禁止不在 Schema 中定义的字段的保存

在 Node.js 的后端环境中,Mongoose 是一个常用的 MongoDB ODM 库。在使用 Mongoose 时,常常会定义一个 Schema 来描述文档的结构,然后在模型中使用这个 Schema。在编写 Schema 的过程中,我们通常会定义一些字段和类型,但有时候我们可能会遇到一些问题:文档中保存了未定义的字段,这些字段可能是误打误入或者恶意的攻击。因此,在本文中,我们将介绍如何使用 Mongoose 禁止未定义的字段的保存。

代码示例

下面是一个简单的代码示例,使用了 Mongoose,定义了一个 User 的 Schema,并创建了一个用户:

----- -------- - --------------------

----- ---------- - --- -----------------
  ----- - ----- ------- --------- ---- --
  ------ - ----- ------- --------- ----- ------- ---- --
  --------- - ----- ------- --------- ---- --
---

----- ---- - ---------------------- ------------

------ -- -- -
  ----- -------------------------------------------- - ---------------- ---- ---

  ----- ---- - --- ------
    ----- --------
    ------ --------------------
    --------- -----------
    ---- ---
  ---

  ----- ------------

  ----------------- ----- ---------------
-----

在上面的代码中,UserSchema 定义了三个字段:name、email 和 password。在创建用户时,我们还添加了一个 age 字段,但这个字段在 Schema 中并没有定义。

如果我们运行上面的代码,它会执行保存操作,但不会报错。如果我们再次查询数据库中的用户,就会发现 age 字段也被保存了。

为了禁止保存未定义的字段,我们可以通过设置 Schema 的 strict 选项为 true,从而禁用保存未定义的字段。

下面是修改后的代码示例:

----- -------- - --------------------

----- ---------- - --- -----------------
  ----- - ----- ------- --------- ---- --
  ------ - ----- ------- --------- ----- ------- ---- --
  --------- - ----- ------- --------- ---- --
-- - ------- ---- ---

----- ---- - ---------------------- ------------

------ -- -- -
  ----- -------------------------------------------- - ---------------- ---- ---

  ----- ---- - --- ------
    ----- --------
    ------ --------------------
    --------- -----------
    ---- ---
  ---

  --- -
    ----- ------------
  - ----- ----- -
    ---------------------------
  -

  ----------------- ----- ---------------
-----

在上面的代码中,我们使用了 strict 选项将 Schema 设置为 strict 模式。在 strict 模式下,Mongoose 不会保存任何未定义的字段,并且会在保存时触发 ValidationError 错误。

使用上面的代码示例进行测试,我们会看到在保存时触发了 ValidationError 错误,并且不会保存未定义的字段。这也提醒了我们要注意模型的定义,并且在模型中只定义必要的字段。

结论

在本文中,我们介绍了如何使用 Mongoose 禁止未定义的字段的保存。我们强烈建议在定义 Schema 时启用 strict 模式,以防止未定义的字段被保存。这样可以提高系统的安全性和稳定性。

在实际的开发过程中,我们应该对模型进行仔细的设计和定义,确保模型中只包含必要的字段,并且尽可能避免使用未定义的字段。这可以使我们的代码更加健壮和可靠。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670a300ed91dce0dc87f8737