用Parse JavaScript定义两个用户之间的相互关系

Define mutual relation between two user with Parse JavaScript

本文关键字:之间 用户 关系 两个 JavaScript Parse 定义      更新时间:2023-09-26

我想在当前用户和另一个用户(userB)之间设置一个简单的关系。我可以创建sampleRelation,当前用户显示在数据浏览器中userB的sampleRelation列,但是当前用户的关系列表是空白的,尽管它应该显示userB的名称。Javascript对我来说是完全未知的,我必须使用它,因为CloudCode,最初我使用的是iOS SDK,我这样调用CloudCode函数:

[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
        if (object) {
PFUser *user = (PFUser *)object;          
[PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}]; }];

,下面是JavaScript实现:

Parse.Cloud.define('editUser', function(request, response) {
               var userId = request.params.userId;
               var User = Parse.Object.extend('_User'),
               user = new User({ objectId: userId });
               var currentUser = request.user;
               var relation = user.relation("sampleRelation");
               relation.add(currentUser);
               currentUser.save();
               Parse.Cloud.useMasterKey();
               user.save().then(function(user) {
                                response.success(user);
                                }, function(error) {
                                response.error(error)
                                });
               });

我确信我需要以某种方式保存当前用户的关系,因此我添加了currentUser.save();行,但没有任何改变。我不知道我错过了什么实现或现有的代码隐藏了错误。

我的尝试基于Timothy的回答。

Parse.Cloud.define('editUser', function(request, response) {
               var userId = request.params.userId;
               var User = Parse.Object.extend('_User'),
               user = new User({ objectId: userId });
               var currentUser = request.user;
               var relation = user.relation("sampleRelation");
               relation.add(currentUser);
               Parse.Cloud.useMasterKey();
               var userQuery = new Parse.Query(Parse.User);
               userQuery.get(request.params.userId)
               .then(function (user) {
                     var relation = user.relation("sampleRelation");
                     relation.add(request.user);
                     // chain the promise
                     return user.save();
                     ).then(function (user) {
                            response.success(user);
                            }, function (error) {
                            response.error(error);
                            });

这里是我得到的错误:

Update failed with Could not load triggers.  The error was Uncaught SyntaxError: Unexpected token . in main.js:28
第二更新

Parse.Cloud.useMasterKey();
var userQuery = new Parse.Query(Parse.User);
userQuery.get(request.params.userId)
.then(function (user) {
      var relation = user.relation("sampleRelation");
      relation.add(request.user);
      // chain the promise
      return user.save();
      }).then(function (user) {
              response.success(user);
              }, function (error) {
              response.error(error);
              });

您没有更改currentUser,因此调用currentUser.save()将不会做任何事情。

另外,当获得一个现有用户时,您应该执行以下操作:

Parse.Cloud.define('editUser', function(request, response) {
    Parse.Cloud.useMasterKey();
    var userQuery = new Parse.Query(Parse.User);
    userQuery.get(request.params.userId)
    .then(function (user) {
        var relation = user.relation("sampleRelation");
        relation.add(request.user);
        // chain the promise
        return user.save();
    }).then(function (user) {
        var currentUser = request.user;
        var relation = currentUser.relation("sampleRelation");
        relation.add(user);
        // chain the new promise
        return currentUser.save();
    }).then(function () {
        response.success();
    }, function (error) {
        response.error(error);
    });
});