解析 request.object.get("KEY") 总是 returns undefined
Parse request.object.get("KEY") always returns undefined
我这里有个奇怪的问题。我有一个使用 Parse.com 作为后端构建的项目(在建立与数据库的连接时使用 cloudcode 来验证一些事情)。一切正常。
但是问题来了。另一位开发人员向我报告说出了点问题,因为他每次尝试在 CloudCode 中调用 request.object.get('KEY')
时都会得到 'undefined'。该开发人员使用与我完全相同的代码库。
所以我决定去看看。虽然使用我的 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')
returns undefined
,对于我在上传 PFObject
之前在 iOS 代码中定义的每个键。
请注意,使用我的个人帐户一切都很好...
我已经看过 this 个帖子,但是删除 ACL 并没有成功。 request.object.get()
保持未定义状态,而 request.user
为除我之外的每个测试的 Parse 帐户定义。
编辑 1
我还在上传之前查看了 activity 对象,所有字段都已正确设置。
编辑 2
完全删除云代码后,对象被正确上传到 Parse,所有字段都是通过 iOS 客户端设置的方式。所以看起来 Parse 的云代码有问题,但是一旦对象通过云代码,它就会丢失所有字段。
我终于解决了这个问题。这绝对是 Parse Javascript SDK 中的错误。我将 global.json 中的 Javascript SDK 版本从 "latest" 改回版本“1.4.2”,将其上传到 cloudcode 文件夹,一切恢复正常。
你也可以测试其他版本,也许v1.5.0也可以,但是当我发现v1.4.2可以正常工作时,我就没有尝试更新的版本了。
编辑
所以,我发现 Parse 一定在他们的命令行工具中改变了一些东西。如果您使用最新版本的命令行工具创建 CloudCode 文件夹,那么 global.json 文件似乎不再存在。但是,您可以手动创建它并将完整的文件夹上传到您的 Parse 应用程序。
这就是我的 CloudCode 文件夹的样子,举个例子:
CloudCode 文件夹包含三个子文件夹
• 云 - 包含云代码文件
• 配置 - 包含 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.com 作为后端构建的项目(在建立与数据库的连接时使用 cloudcode 来验证一些事情)。一切正常。
但是问题来了。另一位开发人员向我报告说出了点问题,因为他每次尝试在 CloudCode 中调用 request.object.get('KEY')
时都会得到 'undefined'。该开发人员使用与我完全相同的代码库。
所以我决定去看看。虽然使用我的 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')
returns undefined
,对于我在上传 PFObject
之前在 iOS 代码中定义的每个键。
请注意,使用我的个人帐户一切都很好...
我已经看过 this 个帖子,但是删除 ACL 并没有成功。 request.object.get()
保持未定义状态,而 request.user
为除我之外的每个测试的 Parse 帐户定义。
编辑 1
我还在上传之前查看了 activity 对象,所有字段都已正确设置。
编辑 2
完全删除云代码后,对象被正确上传到 Parse,所有字段都是通过 iOS 客户端设置的方式。所以看起来 Parse 的云代码有问题,但是一旦对象通过云代码,它就会丢失所有字段。
我终于解决了这个问题。这绝对是 Parse Javascript SDK 中的错误。我将 global.json 中的 Javascript SDK 版本从 "latest" 改回版本“1.4.2”,将其上传到 cloudcode 文件夹,一切恢复正常。
你也可以测试其他版本,也许v1.5.0也可以,但是当我发现v1.4.2可以正常工作时,我就没有尝试更新的版本了。
编辑
所以,我发现 Parse 一定在他们的命令行工具中改变了一些东西。如果您使用最新版本的命令行工具创建 CloudCode 文件夹,那么 global.json 文件似乎不再存在。但是,您可以手动创建它并将完整的文件夹上传到您的 Parse 应用程序。
这就是我的 CloudCode 文件夹的样子,举个例子: CloudCode 文件夹包含三个子文件夹
• 云 - 包含云代码文件
• 配置 - 包含 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"
}
}
}