【发布时间】:2015-08-25 22:46:02
【问题描述】:
我为预定义类 ParseInstallation 创建了一个解析云 beforeSave 触发器,以便删除同一用户的重复解析安装,有点像 this gist 上的内容。我部署的云代码如下:
Parse.Cloud.beforeSave(Parse.Installation, function(request, response) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.Installation);
//PROBLEM: request.object.get("username") is undefined...
query.equalTo("username", request.object.get("username"));
query.first().then(function(duplicate) {
if (typeof duplicate === "undefined") {
console.log("Duplicate does not exist, New installation");
response.success();
} else {
console.log("Duplicate exist..Trying to delete " + duplicate.id);
duplicate.destroy().then(function(duplicate) {
console.log("Successfully deleted duplicate");
response.success();
}, function() {
console.log(error.code + " " + error.message);
response.success();
});
}
}, function(error) {
console.warn(error.code + error.message);
response.success();
});
})
问题是,正如代码内联注释的那样,request.object.get("username") 返回未定义。事实上,request.object 的所有属性都是未定义的!
在我的 android 客户端应用程序中,我将 ParseUser 和用户名关联到 ParseInstallation 对象,如下所示:
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
ParseInstallation installation = ParseInstallation.getCurrentInstallation();
installation.put("username", username);
installation.put("user", user);
installation.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e == null) {
Log.e(TAG, "Parse installation was created successfully!");
} else {
Log.e(TAG, "An error occurred while saving Parse installation: " + e.toString());
}
}
});
//more code...
} else {
Log.e(TAG, "Signup error: " + e.getMessage());
//more code...
}
}
});
因此,鉴于上述情况,人们会期望,在解析云上,request.object.get("username") 将返回实际用户用户名而不是未定义,对吗? (顺便说一句,是的,我已经检查了 android 客户端代码上的用户名变量不为空也不为空!)
为什么request.object属性都是未定义的???
那么如何在云触发器上从 ParseInstallation 获取username???
另外,有没有人在 IOS 客户端应用中遇到过这个问题?
【问题讨论】:
-
感谢@Larcerax,但我尝试在该帖子中使用 request.params.username 但 request.params 也未定义...
标签: android ios swift parse-platform cloud