介绍
ThinkJS 是一款面向未来开发的 Node.js 框架,整合了大量的项目最佳实践,让企业级开发变得如此简单、高效。从 3.0 开始,框架底层基于 Koa 2.x 实现,兼容 Koa 的所有功能。
官方文档传送门点这里
作为国内一款优秀的nodejs开源框架,使用起来非常方便。作为一名Android 开发的程序猿,经过短暂的学习,目前也能够独自后台API了。在这里记录自己的学习开发经验,帮助大家一起学习成长。
Thinkjs 配置定时任务很简单:
- 定时任务的配置文件为 src/config/crontab.js(多模块项目下配置文件为 src/common/config/crontab.js,也支持在每个模块下配置定时任务文件 src/[module]/config/crontab.js),配置项为一个数组。如:
module.exports = [{
interval: '10s',
immediate: true,
handle: () => {
//do something
}
}, {
cron: '0 */1 * * *',
handle: 'crontab/test',
type: 'all'
}]
src/config/crontab.js 这个文件执行 thinkjs new [project_name] 来创建项目,默认是没有的,需要自己创建,如下图:
2.参数说明:
每个配置项支持的参数如下:
interval {String | Number} 执行的时间间隔
支持数字和字符串二种格式,单位是毫秒。如果是字符串,那么会用 think.ms 方法解析为数字。
cron {String} crontab 的格式,如 0 /1 * *
crontab 格式,具体见 http://crontab.org/。如果配置了 interval 属性,那么会忽略该属性。
type {String} 任务执行方式, one 或者 all, 默认是 one
任务会在哪些子进程中执行,默认只在一个子进程中执行,all 为在所有子进程中执行。即使配置了一个子进程中执行,也只能保证一个机器下在一个子进程中执行,多台机器下还是会执行多次。如果跨机房、跨机器只希望执行一次,那么可以通过 enable 参数控制或者命令行执行来完成。
handle {Function | String} 执行任务,执行相应函数或者是路由地址,如:crontab/test
定时任务的执行方法,可以是一个具体的执行函数,也可以是一个路由地址(会根据路由解析,然后执行对应的 Action)。
immediate {Boolean} 是否立即执行,默认是 false
定时任务是否立即执行一次。
enable {Boolean} 是否开启,默认是 true
定时任务是否开启,设置为 false 则关闭该条定时任务规则。比如:多机器下只希望在一台机器下执行,那么可以通过机器名来判断:
const hostname = require('os').hostname();
module.exports = [{
interval: '10s',
enable: hostname === 'host name',
handle: () => {
//do something
}
}]
重点解释说明:
- 定时任务handle可以有两种配置方式,一种是函数,或者为路由地址。
- 定时任务的时间设置也有两种配置,一种是interval 设置时间间隔,一种是cron {String} crontab 的格式,如果配置了interval 参数则cron参数无效。
推荐使用crontab 的格式的配置,比较方便灵活,可以直接设定定时任务的执行时间比如每天晚上24点,或者每天早晨6点执行定时任务,用来做一些后台统计之类的事情。
后面介绍一下,使用Thinkjs的定时任务发送邮件的示例。
定时任务代码如下:
module.exports = [{
// interval: '10s',
cron: '*/1 * * * *',
immediate: true,
handle: () => {
//do something
console.log('crontab handler.');
}
}, {
cron: '*/1 * * * *',
// interval: '3s',
immediate: true,
handle: 'http://127.0.0.1:8360/index/sendMail',
type: 'all'
}]
其中:
- cron: ‘/1 * * *’,表示每分钟执行一次;
- 更多关于crontab 的格式的配置,可以自行在上网搜索了解;比如:https://blog.csdn.net/qq_36644757/article/details/79963004