main.js是针对全站的处理脚本能够处理诸如: 数据缓存,时间相关的计划任务等.
首先在项目 "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 = {},
page_data = {};
return when.pipeline([
/*INSBEGIN:SCHEDULE*/
/*INSEND:SCHEDULE*/
]);
}
function init(req) {
// =============== 注意!!! ======================= //
// main.js修改完毕之后必须发布静态资源,否则改动无效。
// =============== 注意!!! ======================= //
// evtsys.cudon("create", req.wwdomain(), "修改为需要监听的表名", createNode);// 监听tableName中发生的create事件
// evtsys.cudon("update", req.wwdomain(), "修改为需要监听的表名", updateNode);// 监听tableName中发生的 update 事件
// evtsys.cudon("del", req.wwdomain(), "修改为需要监听的表名", deleteNode);// 监听tableName中发生的 del 事件
if (global.config.id === '/var/run/wware/wware-1.sock') {
// schedule(req); // 启动计划任务
}
}
module.exports.init = init;
})();