Parse platform 解析云代码无法添加关系

Parse platform 解析云代码无法添加关系,parse-platform,cloud,add,relation,Parse Platform,Cloud,Add,Relation,我正在学习解析,有点困在一个bug中,这个bug与将对象添加到关系列(两个相关的类)有关。下面是代码。基本上,我的组织类通过一个名为admins的关系字段与users类相关联。一个组织可以有许多管理员。 这可能不是我正在做的优化,所以请指导我。我首先检查是否存在已传递的管理员和组织的objectId。此函数不适用于一般用户,因此我可以传递objectId。我不清楚这里出了什么问题,但若我在添加之前和之后打印关系对象的内容,那个么在after调用中className的值是null。请告知我遗漏了什

我正在学习解析,有点困在一个bug中,这个bug与将对象添加到关系列(两个相关的类)有关。下面是代码。基本上,我的组织类通过一个名为admins的关系字段与users类相关联。一个组织可以有许多管理员。 这可能不是我正在做的优化,所以请指导我。我首先检查是否存在已传递的管理员和组织的objectId。此函数不适用于一般用户,因此我可以传递objectId。我不清楚这里出了什么问题,但若我在添加之前和之后打印关系对象的内容,那个么在after调用中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");
            }
    });
});

您的代码有几个问题:

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");
            }
    });
});

您的代码有几个问题:

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");
            }
    });
});

太棒了,非常感谢Timothy,感谢您的详细解释,感谢您宝贵的时间回复,它正在工作:-)太棒了,非常感谢Timothy,感谢您的详细解释,感谢您宝贵的时间回复,它正在工作:-)