工作流
main.js是针对全站的处理脚本能够处理诸如: 数据缓存,时间相关的计划任务等.
注意:对项目lib/middle文件夹内文件发送变动(目前当修改main.js或者job文件会涉及到),请使用<<技术任务更新通知>>的六条发送邮件
在wide的站点编辑页面,点击编辑->新建业务功能(事件类型:文件名为main.js,对应功能的启动方式为当前进程的事件。通常用于支持同步缓冲数据等进程事件驱动的业务逻辑功能。)
ps:在项目 "lib" 目录下任意目录中的main.js都会被执行到.可以根据需求创建多个main.js,以目录区分.因为模块中也会有main.js是,其main.js是放在以模块名命名的目录中的.所以项目中新建目录的时候需要避免与模块名重复例如 auth, email 等
在标准数据库(ES)中所进行的 "创建(C)", "更新(U)", "删除(D)" 操作都会发出对应的系统事件.而在main.js中是可以监听到这些事件,并做一些处理. 缓存表的数据维护就是基于这个特性的. 监听数据发生变动的表中的 CUD 事件, 进而更新缓存表中对应的数据. 实现起来可以用一句话总结: "当 xxx 表,发生 xxx 事件时,做 xxx 处理".
具体操作:
例如 "每周三15点10分 做xxx","三天后 做xxx". 都是计划任务.
具体操作:
模板(只用于展示,如果使用请按步骤按下载最新版本)
/*
version=0.1
*/
(function() {
var evtsys = reqlib("evtsys");
function createNode(doc, database) {
/* inputs 变量中属性解释:
inputs : {
"index": "test.com", // 站点域名
"type": "test", // 表名
"id": "f93e14aff53aec98b896c9ce03f42a28", // 新建记录的 _id
"body": { // 新建记录的所有数据
"id": "id",
"name": "name"
}
}
*/
var tmp_data = {},
inputs = doc,
page_data = {},
req = {
database: function() {return database;}
};
return when.pipeline([
/*INSBEGIN:ONCREATED*/
/*INSEND:ONCREATED*/
]);
}
function updateNode(doc, database) {
/* inputs 变量中属性解释:
inputs = {
"index": "test.com", // 站点域名
"type": "test", // 表名
"id": "f93e14aff53aec98b896c9ce03f42a28", // 新建记录的 _id
"body": {
"doc": {
"id": "id",
"name": "name"
}
}
}
*/
var tmp_data = {},
inputs = doc,
page_data = {},
req = {
database: function() {return database;}
};
return when.pipeline([
/*INSBEGIN:ONUPDATED*/
/*INSEND:ONUPDATED*/
]);
}
function deleteNode(doc, database) {
// !!! 注意,发生记录删除事件的时候,记录还未被删除,如果需要获取记录信息,请自行通过 inputs.id作为记录的_id来获取将要删除的记录的详细数据.
/* inputs 变量中属性解释:
inputs = {
"index": "test.com", // 站点域名
"type": "test", // 表名
"id": "f93e14aff53aec98b896c9ce03f42a28", // 删除记录的 _id
}
*/
var tmp_data = {},
inputs = doc,
page_data = {},
req = {
database: function() {return database;}
};
return when.pipeline([
/*INSBEGIN:ONDELETED*/
/*INSEND:ONDELETED*/
]);
}
function schedule(req){
var tmp_data = {},
inputs = doc,
page_data = {};
return when.pipeline([
/*INSBEGIN:SCHEDULE*/
/*INSEND:SCHEDULE*/
]);
}
function init(req) {
// evtsys.cudon("create", req.wwdomain(), "修改为需要监听的表名", createNode);// 监听tableName中发生的create事件
// evtsys.cudon("update", req.wwdomain(), "修改为需要监听的表名", updateNode);// 监听tableName中发生的 update 事件
// evtsys.cudon("del", req.wwdomain(), "修改为需要监听的表名", deleteNode);// 监听tableName中发生的 del 事件
// schedule(req); // 启动计划任务
}
module.exports.init = init;
})();