Java脚本
解析云代码




在我的应用程序中,User可以请求加入另一个Users帐户。伪代码如下:


发送我们要加入的帐户的username
搜索以查看数据库中是否存在username
如果no返回
如果yes创建一个新的AccountRequest对象
将新创建的AccountRequest对象添加到我们要搜索的用户中。


我可以执行第1-4步,但是无法完成第5步。

这是我正在使用的代码。

Parse.Cloud.define("sendAccountAdditionRequest", function(request, response) {

  console.log("-sendAccountAdditionRequest");

  // Create the query on the User class
  var query = new Parse.Query(Parse.User);

  // Set our parameters to search on
  query.equalTo("username", request.params.adminUsername);

  // Perform search
  query.find({

    // We found a matching user
    success: function(results) {

        Parse.Cloud.useMasterKey();

        var fetchedUser = results[0]

        console.log("--found user");
        console.log("--creating new AccountRequest");

        // Create a new instance of AccountRequest
        var AccountRequestClass = Parse.Object.extend("AccountRequest");
        var accountRequest = new AccountRequestClass();

        // Set the User it is related to. Our User class has a 1..n relationship to AccountRequest
        accountRequest.set("user", fetchedUser);

        // Set out other values for the AccountRequest
        accountRequest.set("phone", request.params.adminUsername);
        accountRequest.set("dateSent", Date.now());

        // Save the new AccountRequest
        accountRequest.save(null,{

            // Once the new AccountRequest has been saved we need to add it to our fetched User
            success:function(savedRequest) {

                console.log("---adding AccountRequest to fetched User");

                //
                // === This is where stuff breaks
                //

                var requestRelation = fetchedUser.relation("accountRequest");

                // Now we need to add the new AccountRequest to the fetched User. The accountRequest property for a User is array...I'm not sure how I'm suppose to append a new item to that. I think I need to somehow cast results[0] to a User object? Maybe?
                requestRelation.add(savedRequest);

                // We perform a save on the User now that the accountRequest has been added.
                fetchedUser.save(null, {

                    success:function(response) {
                        console.log("----AccountRequest complete");
                        response.success("A request has been sent!");
                    },

                    error:function(error) {
                        // This is printing out: ParseUser { _objCount: 2, className: '_User', id: 'QjhQxWCFWs' }
                        console.log(error);
                        response.error(error);
                    }
                });


                //
                // ================================
                //


                //response.success("A request has been sent!");
            },

            // There was an error saving the new AccountRequest
            error:function(error) {
                response.error(error);
            }
        });
    },

    // We were not able to find an account with the supplied username
    error: function() {
      response.error("An account with that number does not exist. Please tell your administrator to sign up before you are added.");
    }
  });
});


我相信我的问题是从初始查询返回的搜索结果中获取accountRequest关系。要注意的另一件事是,我尚未创建我的accountRequestPFUser属性,我的理解是,当我执行save函数时,这将由Parse自动完成。

最佳答案

是否为您创建accountRequest取决于是否将类级别权限设置为允许客户端应用程序添加字段。您的Parse.User可能设置为NO。

但是无论如何都不需要Parse.User上的关系,因为您已经在AccountRequest类上建立了该关系。给定一个用户,您可以通过以下方式获得它的accountRequests:

PFQuery *query = [PFQuery queryWithClassName:@"AccountRequest"];
[query whereKey:@"user" equalTo:aUser];
query.find()...


这等效于在User上获取关系,获取查询并运行它。

关于您的代码的几点注意事项:(a)当您知道只有一个结果时,findOne将为您节省一行;(b)使用Parse.Promise确实可以使事情整齐。

关于javascript - 将项目追加到获取的项目的数组解析云代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38382493/

10-09 17:03