前言
在 Node.js 中,我们经常需要与 MongoDB 这样的数据库进行交互。而在进行 MongoDB 数据库开发时,比较常用的库就是 Mongoose。而 Mongoose 中提供了一种轻量的任务调度工具——Agenda。本文将介绍一款基于 Mongoose 和 Agenda 的 npm 包——mongoose-model-agenda,它将 Mongoose 的多数特性封装在一个 MongoDB Schema 中,并使用 Agenda 来执行任务调度。
安装
npm install mongoose-model-agenda --save
使用
基本使用
-- -------------------- ---- ------- ----- -------- - -------------------- ----- - ------ - - --------- ----- - ----------------- - - --------------------------------- ----- ---------- - --- -------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --- ------------------------- ------------ --------------------------------------------------- - ---------------- ---- --- ----- ---- - ----------------------- ----- --- - -------------------- -- --------- ----- ------- - --- ------------------- --- ------------------ ------- -----------
高级使用
-- -------------------- ---- ------- ----- -------- - -------------------- ----- - ------ - - --------- ----- - ----------------- - - --------------------------------- ----- -------- - --- -------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --- ---------------------------- --------- - -------------- - ------------ --- -- --- --------------------------------------------------- - ---------------- ---- --- ----- ------- - -------------------------- ----- --- - ----------------------- - --------- ---------- -------- -----------
API
defineAgendaModel(name, schema, [options])
创建一个带有 Agenda 任务调度功能的 Mongoose 模型。
参数:
name
:字符串,模型名称。schema
:Schema,Mongoose Schema 实例。options
:可选,对象,初始化选项。options.agendaOptions
:可选,对象,设置 Agenda 的选项。
返回一个 Model 实例。
Model.schedule(interval, name, [data])
安排一个任务调度。
参数:
interval
:字符串,规定执行时间间隔的 cron 格式字符串,或者一个可被 Moment.js 解析的字符串、日期对象、时间戳或 Moment.js 对象。name
:字符串,任务名称。data
:可选,对象,用来传递给任务的额外数据。
返回一个 Agenda job 实例。
Job.repeatEvery(interval)
重复执行任务的时间间隔。
参数:
interval
:字符串,规定执行时间间隔的 cron 格式字符串,或者一个可被 Moment.js 解析的字符串、日期对象、时间戳或 Moment.js 对象。
Job.repeatAt(time)
重复执行任务的时间点。
参数:
time
:字符串,规定执行时间点的 cron 格式字符串,或者一个可被 Moment.js 解析的字符串、日期对象、时间戳或 Moment.js 对象。
Job.unique(opts)
将任务设为唯一任务,重复执行时会被忽略。
参数:
opts
:对象,设置唯一任务的选项。opts.name
:字符串,设置任务的 name 属性。opts.immediate
:布尔型,禁用完全重复任务的所有未完成的任何实例。默认为 false。opts.unique
:字符串或对象,在锁定期间要设置为唯一的 job 属性。默认为{ name: 1, lockedAt: 1, data: 1 }
。
Job.disable()
禁用任务执行。
Job.enable()
启用任务执行。
Job.save()
将任务保存至数据库中并启动任务的执行。
总结
mongoose-model-agenda 是一个非常轻量的任务调度工具,它不仅提供了 Agenda 的所有功能,还将 Mongoose 的大部分特性封装在一个 MongoDB Schema 中,极大地方便了开发者的使用。在使用时,我们除了需要熟悉 Agenda 的使用外,还要明确任务的功能和执行的时间。在任务调度功能的帮助下,我们可以极大地减少了定时任务的执行成本,提高了开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60056cf781e8991b448e6bf9