我正在使用Parse作为我的后端,并希望搜索现有的朋友请求并更新这些请求而不是创建新的请求(如果已有的请求)。
我以为我知道怎么做但是当我提交新朋友请求时,他们会被创建为新对象而不是更新旧对象,即使我找到了现有请求。
以下是我正在使用的代码:
Parse.Cloud.beforeSave("FriendRequest", function(request, response) {
//search for an existing friend request with the same "from" and "to"
var query = new Parse.Query("FriendRequest");
query.equalTo("from", request.object.get("from"))
.equalTo("to", request.object.get("to"));
query.find({
success: function(results) {
if(results.length > 0)
{
var result = results[0];
//the new request id is undefined as expected
console.log("request id: " + request.object.id);
//the result id is valid for an object in the db as expected
console.log("result id: " + results[0].id);
//set the id of the request to the id of the existing db object
request.object.id = results[0].id;
//the valid id is now in the request object id
console.log("request id: " + request.object.id);
//after response.success, the database shows a new entry
//with a different id
//instead of updating the existing entry
response.success();
}
}
});
});
这里没有很多事情发生。通过数据库中的正确条目,查询确实成功返回。我可以确认我为数据库中的现有项获取了正确的objectId。任何想法或想法都表示赞赏!
答案 0 :(得分:1)
您无法手动设置对象的objectId
。
如果您希望beforeSave
不创建新对象(这是您在调用beforeSave
时要做的事情),则需要手动更新现有对象然后回复失败了。如果您使用response.success()
回复,则对象将正常保存。
在您的代码中,您似乎无法对现有对象进行任何更改。您真正需要做的就是返回response.error
(https://parse.com/docs/cloud_code_guide#functions-onsave)
当然,您也应该以某种方式在代码中处理此问题。通过警告用户或静默处理它。
然而;为什么你的代码试图保存新朋友请求(如果已存在)?您的应用应该知道该应用存在并禁用好友请求按钮或用户界面提供的任何内容。