【问题标题】:Parse Cloud Code weird bug解析云代码奇怪的错误
【发布时间】: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 客户端应用中遇到过这个问题?

【问题讨论】:

标签: android ios swift parse-platform cloud


【解决方案1】:

通过request.user对象检索用户名:

var User = request.user;
console.log(User.get("username"));

//or skip the first step:
console.log(request.user.get("username"));

请注意,您还可以通过调用 Parse.Object 的 attributes 属性来检索这些值(通常是不好的做法):

console.log(request.user.attributes.username);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多