Parse platform “云代码原因”;试图用指向新的未保存对象的指针保存对象“;保存指针时

Parse platform “云代码原因”;试图用指向新的未保存对象的指针保存对象“;保存指针时,parse-platform,Parse Platform,在我的应用程序中,我有用户和帖子,我试图实例化我的活动类,它有指向用户和帖子对象的指针。这是我的密码: var Activity = Parse.Object.extend("Activity"); var User = Parse.Object.extend("_User"); var Post = Parse.Object.extend("Posts"); var activityHandler = function(request, response){ //toUser is

在我的应用程序中,我有用户和帖子,我试图实例化我的活动类,它有指向用户和帖子对象的指针。这是我的密码:

var Activity = Parse.Object.extend("Activity");
var User = Parse.Object.extend("_User");
var Post = Parse.Object.extend("Posts");

var activityHandler = function(request, response){
    //toUser is the objectId of the User not the object itself.
    var toUserId = request.toUser;
    var fromUserId = request.fromUser;
    var postId = request.post;
    var arg = request.argument;


    var toUser = new User();
    toUser.set("objectId",toUserId);
    var fromUser = new User();
    fromUser.set("objectId",fromUserId);
    var post = new Post();
    post.set("objectId",postId);

    var activity = new Activity();
    activity.set("activityFrom", fromUser);
    activity.set("activityTo", toUser);
    activity.set("argument", arg);
    activity.set("post", post);
    activity.save(null, {
        useMasterKey: true,

            success: function(o){
        console.log("activity logged successfully");
        response.success();
            },
            error: function(err){
        console.log(err);
            },
        }
    );
};

Parse.Cloud.define("createActivity", activityHandler);
代码是不言自明的,但总而言之,客户端发送适当的用户和帖子ID,云函数应该实例化一个新的
活动
对象,并带有指向用户和帖子的指针。然而,当我尝试保存时,我得到:

{“code”:141,“error:“Uncaught试图用指向新的未保存对象的指针保存对象。”}

问题是,发送到函数的对象ID是完全有效的,数据库中已经存在对象。ACL也不是问题,因为我使用的是主密钥

我做错了什么?

那是我的错

我的代码有多个问题

  • 我使用的是
    object.set(“objectId”,id)
    语法,实际上应该是
    object.id=id
    。我不确定这是否必要,也许没有改变也行,但我到处都读到这是一种不好的做法

  • 我没有正确获取请求参数。我使用的是
    request.param1
    而不是
    request.params.param1
    ,参数变量未定义。很长一段时间以来,我没有检查它是否未定义,因为从我当时的角度来看,错误消息对于未定义参数并没有真正的帮助。(现在有意义了,没有ID,它会自动尝试创建一个新对象)


  • 我已经更正了它们,现在它确实正确保存了。

    当您忘记调用该方法时,也会发生这种情况:

    response.success(object);
    

    我在这里也遇到了同样的问题,请给我解释一下object.id=id,这是否意味着我们应该用object.set(“object”,object.id)来代替?谢谢您应该仅对id、createdAt和updatedAt使用
    .id
    。对于所有其他(AFAIK),使用
    .set('property',val)@libra