1

我正在保存一个名为“Post”的对象,并且我有一个名为“author”的字段,它是 Parse.User 类的指针。当我创建一个新的“发布”对象时,我将“作者”值作为 Parse.User.id 值传递给我的云代码函数。显然,这会导致“作者”字段出现类型错误,因为它是一个字符串并且它正在寻找一个 Parse.User 对象。

所以为了避免这种情况,我设置了一个 beforeSave 触发器,它会检查 'author' 的值,如果它是字符串类型,则查询 Parse.User 类的用户 ID 并将作者值设置为返回的 Promise。

但是..我的 beforeSave 触发器似乎并没有因为任何原因被调用。有谁知道为什么会发生这种情况?最初我以为是我的云函数没有时间了,但我的函数正在完成并给我我预期的类型错误,因为我将一个字符串传递到一个指针字段。

这是我的代码:

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');
    }
});
4

0 回答 0