解析request.object.get(" KEY")总是返回未定义的

时间:2015-09-19 11:00:42

标签: javascript ios parse-platform cloud-code

我这边有一个奇怪的问题。我有一个使用Parse.com构建的项目作为后端(使用云代码来验证与数据库建立连接时的某些事情)。一切都按照应有的方式运作。

但问题出现了。另一位开发人员向我报告说有一些错误,因为他正在接受“未定义”的错误。每次他试图在CloudCode中调用request.object.get('KEY')。这个开发人员使用与我完全相同的代码库。

所以我决定看看它。使用我的Parse帐户,每个应用程序都可以正常工作(甚至是新创建的应用程序),使用其他开发人员的Parse帐户,而不是我们创建的单个新应用程序似乎使用完全相同的代码。它变得更加陌生 - 创建一个全新的Parse帐户和一个新的应用程序产生相同的错误,而我的个人帐户和应用程序继续正常工作。

那么问题是什么?我们正在使用CloudCode,这里是beforeSave方法的示例代码(在javascript中):

Parse.Cloud.beforeSave('Activity', function(request, response) {
   var currentUser = request.user;
   var objectUser = request.object.get('fromUser');
   if(!currentUser || !objectUser) {
     response.error('An Activity should have a valid fromUser.');
   } else {
     response.success();
   }
});

每次request.object.get('KEY')返回undefined时,对于我之前在iOS代码中定义的每个键,都会在上传PFObject之前。 请注意,使用我的个人帐户,一切都很好......

我已经看过this个帖子,但删除ACL并没有做到这一点。 request.object.get()保持未定义,同时为除了我的每个测试的Parse帐户定义request.user

编辑1

在上传活动对象之前,我还看了一下活动对象,并且所有字段都已正确设置。

编辑2

完全删除云代码后,对象被正确上传到Parse,所有字段都是通过iOS客户端设置的方式。因此,Parse的云代码似乎有问题,但是一旦对象通过云代码,它就会丢失所有字段。

1 个答案:

答案 0 :(得分:8)

最后我能够解决这个问题。这绝对是Parse的Javascript SDK中的一个错误。我将global.json中的Javascript SDK版本更改回版本" 1.4.2"而不是" latest",将其上传到cloudcode文件夹,一切都恢复正常。

你也可以测试其他版本,也许v1.5.0也在运行,但是一旦我发现v1.4.2工作正常,我就没有尝试过更新的版本。

修改

所以,我发现,Parse必须在命令行工具中改变一些东西。如果使用最新版本的命令行工具创建CloudCode文件夹,似乎global.json文件已经不存在了。但是,您可以手动创建它并将完整文件夹上载到Parse应用程序。

这就是我的CloudCode文件夹的样子,例如: CloudCode文件夹包含三个子文件夹

•云 - 包含云代码文件

•config - 包含global.json文件

•public - 包含index.html文件

global.json文件包含以下代码行:

{
  "global": {
    "parseVersion": "1.4.2"
  },
  "applications": {
    "YOUR_PARSE_APPS_NAME": {
      "applicationId": "YOUR_APP_ID",
      "masterKey": "YOUR_APP_MASTER_KEY"
    },
    "_default": {
      "link": "YOUR_PARSE_APPS_NAME"
    }
  }
}