解析 iOS SDK + 云代码:如何更新用户
Posted
技术标签:
【中文标题】解析 iOS SDK + 云代码:如何更新用户【英文标题】:Parse iOS SDK + Cloud Code: How to update user 【发布时间】:2014-08-06 17:11:23 【问题描述】:我对如何从云代码更新用户感到困惑。如果有人可以帮助我解决这个问题,我将不胜感激。
我将用于此示例的云代码是:
云代码
Parse.Cloud.define("like", function(request, response)
var userID = request.params.userID;
var User = Parse.User();
user = new User ( objectId: userID );
user.increment("likes");
Parse.Cloud.useMasterKey();
user.save().then(function(user)
response.success(user);
, function(error)
response.error(error)
);
);
从 iOS 调用
[PFCloud callFunctionInBackground:@"like" withParameters:@@"userID": self.selectedFriendID block:^(id object, NSError *error)
];
问题
user = new User ( objectId: userID );
1) 是上面代码中创建“全新”用户的“新”用户,还是在objectId
上“抓取”现有用户以便可以在user.save
上更新?
2) 如果后者是正确的,那么是否可以从objectId
列以外的列中“抓取”用户,或者从userID
列中抓取?
例如:
user = new User ( userID : userID );
【问题讨论】:
在云代码中检索用户的方法是 query.get(request.params.userID.... 我相信这会返回用户对象。我不知道你是否可以这样做与其他专栏。不过,云代码文档中有很多关于此的内容。 【参考方案1】:这一行:
user = new User ( objectId: userID );
创建具有已知 ID 的对象的实例,它仅适用于 objectId
。您对该对象所做的任何更改都会保留,但不会更改其他数据(例如,您不会不小心将其他列清空)。
如果您想通过电子邮件获取用户,则必须进行查询:
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo('email', userEmail);
userQuery.first().then(function(user)
if (user)
// do something with the user here
user.set('new_col', 'new text');
user.save().then(function()
response.success();
);
else
// no match found, handle it or do response.error();
);
// the above code is async, don't put anything out here and expect it to work!
【讨论】:
感谢您的回复!我想我开始看到这里发生了什么。因此,userQuery.equalTo('email', userEmail);
正在通过用户的电子邮件获取特定用户,userQuery.first().then(function(user)
正在访问用户的第一列,即objectId
。因此,在您的代码中的if (user)
下,我应该能够像theUser = new User (objectId : userQuery.objectId );
一样执行theUser.set('new_col', "new text");
保存它,然后在我的数据浏览器中这个用户下会有一个字符串类型的新列new text
?对吗?
first()
函数用于获取第一行/记录,当您只期望最多返回一行时会更好。您将可以访问结果中的完整用户对象,并且可以直接开始设置值并保存它。【参考方案2】:
在云代码中检索用户的方法是 query.get(request.params.userID.... 我相信这会返回用户对象。我不知道你是否可以对其他列执行此操作。那里但是,云代码文档中有很多关于此的内容。如果有帮助,这是我用于编辑用户的云代码功能:
Parse.Cloud.define("editUser", function(request, response)
//var GameScore = Parse.Object.extend("SchoolHappening");
// Create a new instance of that class.
//var gameScore = new GameScore();
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.get(request.params.myUser,
success: function(myUser)
// The object was retrieved successfully.
myUser.set("cabinetPosition", request.params.myPosition);
// Save the user.
myUser.save(null,
success: function(myUser)
// The user was saved successfully.
response.success("Successfully updated user.");
,
error: function(gameScore, error)
// The save failed.
// error is a Parse.Error with an error code and description.
response.error("Could not save changes to user.");
);
,
error: function(object, error)
// The object was not retrieved successfully.
// error is a Parse.Error with an error code and description.
);
);
【讨论】:
以上是关于解析 iOS SDK + 云代码:如何更新用户的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript SDK 更新解析平台中的用户类?