我正在学习Parse,有点困在一个与向关系列添加对象相关的bug(两个相关的类)。以下是代码。基本上我的组织类通过名为admins的关系字段与用户类相关联。一个组织可以有很多管理员。 它可能没有优化我正在做的,所以请指导我。我首先检查管理员和组织的传递objectId的存在。此功能不适用于一般用户,因此我可以传递objectId。我不清楚这里有什么问题,但是如果我在添加之前和之后打印关系对象的内容,则className的值在调用之后为null。请告知我缺少什么或如何改进代码并修复它:)。 顺便说一下,我已经尝试了几天发布的许多解决方案,但到目前为止还没有任何帮助,因此发布了新的问题。 非常感谢。
Parse.Cloud.define("addAdminToOrganization", function(request, response)
{
var queryAdmin = new Parse.Query("Users");
var reqOrgId = request.params.organizationId;
var reqAdminId = request.params.adminId;
queryAdmin.equalTo("objectId", reqAdminId);
queryAdmin.find(
{
success: function(fetchedAdmin)
{
var reqOrgId = request.params.organizationId;
var queryOrg = new Parse.Query("Organizations");
queryOrg.equalTo("objectId",reqOrgId);
var fetchedAdm = fetchedAdmin;
queryOrg.get(reqOrgId,
{
success: function(fetchOrg)
{
var _fetchOrg = fetchOrg;
var adminRelation = fetchOrg.relation("admins");
Parse.Cloud.useMasterKey();
var reqAdmin = request.params.adminId;
adminRelation.add(reqAdmin);
_fetchOrg.save(null,
{
success:function() {
console.log("Admin added to Organization");
response.success("Admin:" + reqAdminID + " added to Organization:"+reqOrgId);
},
error:function(err) {
console.log("Error while adding admin to Organization, "+ err.message);
response.error("Unable to add Admin");
}
} );
},
error: function(err){
console.log("Organization not found : " + err.code);
response.error("Organization not found.");
}
});
},
error:function(err){
console.log("Admin not found: " + err.code);
response.error("Admin not found");
}
});
});
答案 0 :(得分:4)
您的代码存在以下几个问题:
queryAdmin.equalTo("objectId", reqAdminId);
queryAdmin.find(
{
success: function(fetchedAdmin)
{
因为你做了find()
fetchedAdmin
变量将是一个包含0个或更多元素的数组,如果你知道你只想要一个记录丢弃equalTo()
并且只是使用get()
。
奇怪的是,您似乎并未实际使用fetchedAdmin
或将其复制到的变量fetchedAdm
。
queryOrg.equalTo("objectId",reqOrgId);
queryOrg.get(reqOrgId,
equalTo()
调用是多余的,因为您已正确使用get()
进行此查询。
var reqAdmin = request.params.adminId;
adminRelation.add(reqAdmin);
在这里,您正在读取字符串ID并尝试将其添加到关系中,您需要创建指针,或者使用您检索到的管理对象(如果您确实已经正确使用了该对象)。
您的代码的简化如下:
Parse.Cloud.define("addAdminToOrganization", function(request, response)
{
Parse.Cloud.useMasterKey();
var reqOrgId = request.params.organizationId;
var reqAdminId = request.params.adminId;
var queryAdmin = new Parse.Query("Users");
queryAdmin.get(reqAdminId,
{
success: function(fetchedAdmin)
{
var queryOrg = new Parse.Query("Organizations");
queryOrg.get(reqOrgId,
{
success: function(fetchedOrg)
{
var adminRelation = fetchedOrg.relation("admins");
adminRelation.add(fetchedAdmin);
fetchedOrg.save(null,
{
success:function() {
console.log("Admin added to Organization");
response.success("Admin:" + reqAdminID + " added to Organization:"+reqOrgId);
},
error:function(err) {
console.log("Error while adding admin to Organization, "+ err.message);
response.error("Unable to add Admin");
}
} );
},
error: function(err){
console.log("Organization not found : " + err.code);
response.error("Organization not found.");
}
});
},
error:function(err){
console.log("Admin not found: " + err.code);
response.error("Admin not found");
}
});
});