npm 包 @bluewaitor/mongoose-plugin-timestamp 使用教程
@bluewaitor/mongoose-plugin-timestamp
是一个基于 mongoose
的插件,用于自动给 Collection 中的文档加上 createdAt
和 updatedAt
两个时间戳字段,方便数据记录与管理。本文将介绍该 npm 包的使用教程,以及深度理解和指导意义。
一、安装
在终端中使用 npm 安装该包:
npm install --save @bluewaitor/mongoose-plugin-timestamp
二、使用
在 mongoose
中引用该插件并注册到 Schema 上:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- --------- - ------------------------------------------------- ----- ---------- - --- ----------------- ------ - ----- ------- --------- ----- -- ------------ ------- --- -----------------------------
在上述代码中,我们引用了 @bluewaitor/mongoose-plugin-timestamp
模块,并将其注册到 TodoSchema
上,以便在 TodoSchema
的 Collection 中增加自动生成时间戳的功能。
三、深度理解
使用这段代码时,很多开发者会对插件的实现原理产生疑问。这个插件的核心是通过 mongoose
的 pre 方法,在特定的时间节点上进行记录。下面是该插件的实现代码片段:
-- -------------------- ---- ------- -------------------------- -------- -- - ------------------ -------- ------ - ----- ----------- - ----------- -------------- - ------------ -- ----------------- - -------------- - ------------ - ------- --- ---
首先,我们可以看到,该插件使用了 schema.pre('save', ...)
方法来监听 Collection 中的文档保存事件。这是 mongoose
的默认方式,可以在 save()
时自动触发。当调用 save()
方法时,触发的事件包括以下几个:
init
当新文档初始化时validate
在文档验证时save
在保存文档时remove
在移除文档时
这些方法都是可用的,在不同的场合中使用可以获得不同的效果。在我们上面的例子中,会在保存文档时触发一次 pre('save', ...)
方法。
接下来,我们可以看到,在 pre('save', ...)
函数体中,我们使用了两个时间戳字段。其中 updatedAt
时间戳字段记录了任何更新操作的时间,而 createdAt
时间戳字段记录了文档创建的时间。如果 createdAt
还没有值,它也会被设置为 Date.now()
,也就是当前时间的时间戳。
这样,每当我们保存或更新文档时,这两个时间戳字段便会被自动更新。
四、指导意义
@bluewaitor/mongoose-plugin-timestamp
插件能够大大方便我们管理 Document 的时间戳信息,这也是运用 middleware 的重要应用。同时,这种方法还能够避免了时间戳字段被篡改的情况,从而更好的维护了数据的完整性。
另一方面, @bluewaitor/mongoose-plugin-timestamp
插件还提供了很好的扩展性,理论上只需要在 pre 函数中加入其他需要的逻辑即可。如在文章中,我们增加了非空字段检查逻辑。这和业务逻辑有关,也让具有一定开发经验的人开发自己的插件变得很容易。
TodoSchema.plugin(timestamp); TodoSchema.pre('save', function (next) { if (!this.title) { return next(new Error('Title is required!')) } next(); });
最后,让我们来看一下具体的应用场景。假设我们正在开发一个 TodoList 的应用,这个应用可以让用户创建 TodoList 项目并将任务添加到其中。通过使用 @bluewaitor/mongoose-plugin-timestamp
插件,我们可以方便地列出每个项目的创建时间以及项目中任务的最新更新时间,从而更好地优化应用程序。
总结
在本文中,我们学习了 @bluewaitor/mongoose-plugin-timestamp
插件的使用教程和深度理解,并介绍了 middleware 在实现中的运用。这个插件在数据记录和管理中扮演了重要角色,也提高了开发效率。希望通过这个教程,您对插件的使用和实现有了更深入的认识。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055e9a81e8991b448dbf02