Skip to content

Commit a64c7c1

Browse files
committed
bugfix: hook 函数可能造成死循环
1 parent ac0ba6e commit a64c7c1

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

lib/leanengine.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,22 @@ var call = function(funcName, params, user, meta, cb) {
317317
}
318318
};
319319

320+
var hookMarks = [
321+
'__before',
322+
'__after_update',
323+
'__after'
324+
];
325+
326+
// 如果对象有 hook 标记,则需要明确 set 一次,标记才会保存在 changed 列表
327+
// 这样调用 REST API 时才会将标记一同传到存储服务端
328+
var setHookMark = function (obj) {
329+
for (i in hookMarks) {
330+
if (obj.get(hookMarks[i])) {
331+
obj.set(hookMarks[i], obj.get(hookMarks[i]));
332+
}
333+
}
334+
}
335+
320336
var classHook = function(className, hook, object, user, meta, cb) {
321337
if (!Cloud.__code[hook + className]) {
322338
var err = new Error("LeanEngine not found hook '" + hook + className + "' for app '" + AV.applicationId + "' on " + NODE_ENV + ".");
@@ -325,6 +341,7 @@ var classHook = function(className, hook, object, user, meta, cb) {
325341
}
326342
var obj = createAVObject(className);
327343
obj._finishFetch(object, true);
344+
setHookMark(obj)
328345
try {
329346
if (hook.indexOf('__after_') === 0) {
330347
// after 的 hook 不需要 response 参数,并且请求默认返回 ok

0 commit comments

Comments
 (0)