Mongoose 如何优雅地处理默认值?

阅读时长 6 分钟读完

在使用 Mongoose 进行开发时,我们经常需要设置默认值来正确地初始化数据模型。默认值可以在定义 Schema 时指定,也可以在保存文档时动态设置。本文将介绍 Mongoose 中的默认值处理方式,并提供一些优雅的解决方案。

Schema 中的默认值

在 Mongoose 中,可以通过在 Schema 中定义默认值来初始化文档。默认值可以是一个固定的值,也可以是一个函数,函数的返回值将作为默认值。

在上面的例子中,我们为 nameage 设置了固定的默认值,为 created_at 设置了一个函数作为默认值,updated_at 的默认值也是一个函数,但是使用了箭头函数的形式。

动态设置默认值

有时候,我们需要在保存文档时动态设置默认值。比如,我们要为 created_atupdated_at 字段设置当前时间,而不是模式定义时的时间。

我们可以在保存文档前,手动设置这些字段的值。但是这种方式很繁琐,容易出错。更好的方式是使用 Mongoose 的 pre 中间件,这样就可以在保存文档前自动设置默认值。

在上面的例子中,我们使用 pre 中间件,在保存文档前自动设置 created_atupdated_at 字段的值为当前时间。

优雅的默认值处理

在实际开发中,我们可能需要更复杂的默认值处理方式。下面是一些优雅的解决方案。

1. 使用默认值函数

默认值函数可以根据当前上下文动态生成默认值。比如,我们可以使用当前用户的 ID 作为默认值。

在上面的例子中,我们使用一个函数作为 created_by 字段的默认值,这个函数可以访问当前请求的用户 ID。

2. 定义默认值常量

有时候,我们需要在多个模型中使用相同的默认值。为了避免重复定义,我们可以将这些默认值定义为常量,并在所有模型中使用。

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

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

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

在上面的例子中,我们定义了两个默认值常量 DEFAULT_CREATED_ATDEFAULT_UPDATED_AT,并在 userSchemapostSchema 中使用。

3. 使用插件

如果我们需要在多个模型中使用相同的默认值处理逻辑,我们可以将这些逻辑封装为插件,以便在所有模型中使用。

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

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

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

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

在上面的例子中,我们定义了一个插件 timestampsPlugin,它为模型添加了 created_atupdated_at 字段,并且在保存文档前自动设置这些字段的值为当前时间。

总结

Mongoose 提供了多种方式来处理默认值。我们可以在 Schema 中定义固定的默认值,也可以使用函数动态生成默认值。使用 pre 中间件可以在保存文档前自动设置默认值。为了避免重复定义,我们可以将默认值定义为常量,并在所有模型中使用。使用插件可以将默认值处理逻辑封装起来,以便在多个模型中使用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6505747695b1f8cacd1eddc6

纠错
反馈