【问题标题】:Parse request.object.get("KEY") always returns undefined解析 request.object.get("KEY") 总是返回 undefined
【发布时间】:2015-12-16 12:15:22
【问题描述】:

我在这里遇到了一个奇怪的问题。我有一个以 Parse.com 作为后端的项目(在建立与数据库的连接时使用 cloudcode 来验证一些事情)。一切正常。

但是问题来了。另一位开发人员向我报告说有问题,因为他每次尝试在 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,对于我在上传PFObject 之前在iOS 代码中定义的每个键。 请注意,使用我的个人帐户一切都很好......

我已经看到this 线程,但是删除 ACL 并没有解决问题。 request.object.get() 保持未定义,而 request.user 为除我之外的每个经过测试的 Parse 帐户定义。

编辑 1

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

编辑 2

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

【问题讨论】:

  • 你能显示request.object中的内容吗?
  • request.object 未定义,它根本不存在(对于其他开发人员,我的帐户仍然可以) - 但 request.user 存在。当对象没有通过cloudcode时,一切都在那里,所有字段都正确设置。

标签: javascript ios parse-platform parse-cloud-code


【解决方案1】:

最后我能够解决这个问题。这绝对是 Parse 的 Javascript SDK 中的一个错误。我将 global.json 中的 Javascript SDK 版本改回版本“1.4.2”而不是“最新”,将其上传到 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"
    }
  }
}

【讨论】:

  • 干得好!请务必将此报告为错误,以便 Parse 团队可以修复它
  • 我有同样的错误你是如何改变 global.json 的?我在哪里可以找到它?
  • 在 .parse.local 隐藏文件中找到它并更改了 1.4.2,一切都很好,非常感谢,拯救了我的一天。 :)
  • 感谢您指出这一点,更改了我的答案以提示您缺少 global.json 文件。
  • 它现在在 .parse.local 中。更改那里的版本也对我有用,谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-03-18
  • 2016-01-16
  • 1970-01-01
  • 2012-09-05
  • 2019-06-27
  • 2015-08-11
  • 2018-03-24
  • 2013-08-15
相关资源
最近更新 更多