在我的应用程序中,我有用户和帖子,我正在尝试实例化我的Activity类,它有指向用户和帖子对象的指针。这是我的代码:
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,云功能应该实例化一个新的Activity
对象,并指向用户和帖子。但是,当我试图保存时,我得到了:
{"code":141,"error":"Uncaught Tried to save an object with a pointer to a new, unsaved object."}
问题在于,发送给函数的对象ID是数据库中已经存在的完全有效的对象。 ACL也不是问题,因为我在主密钥上。
我做错了什么?
答案 0 :(得分:2)
这是我的坏事。
我的代码存在多个问题。
我使用object.set("objectId", id);
语法,实际应该是object.id = id
。我不确定是否有必要,也许没有这种改变也行不通,但我到处都读到这是一种不好的做法。
我没有正确获取请求参数。我使用request.param1
而不是request.params.param1
,并且参数变量未定义。我已经很长时间没有检查它是否未定义,因为从我的观点来看,错误消息对于参数未定义并不是很有帮助。 (现在它有意义,没有ID,它会自动尝试创建一个新对象)
我已经纠正了它们,现在确实可以正确保存。
答案 1 :(得分:0)
当您忘记调用方法时也会发生这种情况:
response.success(object);