Parse beforeSave不触发

时间:2015-07-27 18:11:14

标签: parse-platform cloud-code before-save

我保存了一个名为' Post'我有一个名为' author'这是Parse.User类的指针。当我创建一个新的' Post'对象,我通过了作者' value作为我的Cloud Code函数的Parse.User.id值。显然,这会导致“作者”的类型错误。 field,因为它是一个字符串,它正在寻找Parse.User对象。

为了避免这种情况,我设置了一个beforeSave触发器来检查' author'如果是string类型,则在Parse.User类中查询用户id,并将author值设置为返回的Promise。

但是我的beforeSave触发器似乎无论出于何种原因而被调用。有谁知道为什么会发生这种情况?最初我认为我的云功能已经用完了,但是我的功能正在完成,并且因为我将字符串传递给Pointer字段而给出了我预期的类型错误。

这是我的代码:

Parse.Cloud.beforeSave('Post', function (request, response) {
    var author = request.object.get('author');

    if (typeof author == 'string') {
        var qry = Parse.Query(Parse.User);
            qry.get(author, {
                success: function (user) {
                    request.object.set('author', user);
                    response.success();
                },
                error: function (u, err) {
                    response.error(err.message);
                }
            });

    } else {
        response.success();
    }
});

Parse.Cloud.define("post_update", function(request, response) {
    var vals = request.params;

    /**
     * Update if vals.objectId is set otherwise error
     */
    if (typeof vals['objectId'] != 'undefined' && typeof vals['objectId'] != 'null') {
        var qry = new Parse.Query('Post');
            qry.get(vals.objectId, {
               success: function (obj) {
                    delete vals.objectId;

                    obj.save(vals, {
                        success: function (nobj) {
                            response.success({redirect: false, object: nobj.id});
                        },
                        error: function (nobj, err) {
                            response.error(err.message);
                        }
                    });
               },
               error: function (obj, err) {
                    response.error(err.message + ': ' + vals.objectId);
               }
            });
    } else {
        response.error('Unable to update post');
    }
});

这是我的工作:

Parse.Cloud.define("post_update", function(request, response) {
    var vals = request.params;

    var onSave = {
        success: function (nobj) {
            response.success({redirect: false, object: nobj.id});
        },
        error: function (nobj, err) {
            response.error(err.message);
        }
    };

    /**
     * Update if vals.objectId is set otherwise error
     */
    if (typeof vals['objectId'] != 'undefined' && typeof vals['objectId'] != 'null') {
        var qry = new Parse.Query('Post');
            qry.get(vals.objectId, {
               success: function (obj) {
                    delete vals.objectId;

                    if (typeof vals['author'] === 'string') {
                        var uqry = new Parse.Query(Parse.User);
                            uqry.get(vals.author, {
                                success: function (u) {
                                    vals.author = u;
                                    obj.save(vals, onSave);
                                },
                                error: function (u, err) {
                                    vals.author = null;
                                    obj.save(vals, onSave);
                                }
                            });
                    } else {
                        vals.author = null;
                        obj.save(vals, onSave);
                    }
               },
               error: function (obj, err) {
                    response.error(err.message + ': ' + vals.objectId);
               }
            });
    } else {
        response.error('Unable to update post');
    }
});

0 个答案:

没有答案