解析服务器+云代码:Parse.Object上的beforeSave()

时间:2017-05-11 12:53:38

标签: parse-server cloud-code

我担心我知道答案,但我会把它扔出去。有没有办法使用Cloud Code在所有Parse.Object子类上触发beforeSave方法?

所以我想在所有保存上运行一些代码,而不是Parse的Object的任何特定子类。

我试过这个:

Parse.Cloud.beforeSave(Parse.Object, function(request, response) {
}

......但它似乎没有被触发。

3 个答案:

答案 0 :(得分:2)

我从未听说过这一点,坦率地说,看不到多少好处。第一个参数应该与一个类名匹配,所以我怀疑这个开箱即用的方法。

但是,你真的应该将所有单独的beforeSave分开。我们在云代码中为每个类创建一个单独的文件夹,并为每个类提供一个Controller(beforeSave,afterSave,直接与该类相关的云函数),它具有调用其他Repos的云函数,用于处理不同类的逻辑。 Controller是唯一应该从其他类接触Repos的文件。

然后每个类都有Repo,它处理特定的任务/逻辑,并经常保存或提取对象。

然后是Factory文件,它不进行保存,不进行提取,不进行额外调用。它们仅使用传入的可用数据执行业务逻辑。

每次你创建一个新的Parse Class时,我都会养成设置该控制器的习惯,你可以在那里添加一个beforeSave触发器。

答案 1 :(得分:0)

不,你不能。 您只能为用户定义的类和预定义类创建触发器。 如果类是用户定义的,则第一个参数必须是字符串 e.g。

Parse.Cloud.beforeSave("Car", function(request, response) {
...
}

如果类是预定义的,则第一个参数必须是Parse.ClassName e.g。

Parse.Cloud.beforeSave(Parse.User, function(request, response) {
...
}

答案 2 :(得分:0)

您可以首先获取查询schema的所有类名(请参阅this post),然后使用for循环向每个类添加beforeSave挂钩。在伪代码中:

var classNames = getClassNamesFromSchemaQuery();
classNames.foreach(var classObject){
    Parse.Cloud.beforeSave(classObject.className, (req, resp){
        // resto of the code here
    })
}