2016-04-27 12 views
0

私は補足クラス(Matrixという名前)をターゲットとするUserクラスの友だち関係をコーディングしています。目標は、各友達に追加情報を提供することです。Parse:Cloud JSコードとSwiftが同じ結果を生成しない

ケース#1:iOS/Swiftは、期待される結果を提供します。

のdbownerがあるCurrentUserとdbPeerは#2リストからピックアップ

User ClassMatrix ClassRelation (from User to Matrix)

ケースである

func saveRelation(user: User, state: Bool) { 
    if let dbOwner = self.dbUser, dbPeer = user.dbUser { 
     let dbMatrix = PFObject(className: "Matrix") 

      dbMatrix["userid"] = dbPeer 
      dbMatrix.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
       if(error == nil) && (success == true) { 

        let relation = dbOwner.relationForKey("friend") 
         relation.addObject(dbMatrix) 

        dbOwner.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in 
         if(error == nil) && (success == true) { 
          self.directory.friend.append(user) 

          Trace.log("Relation \(user.account.id)", message: "friend") 
         } else { 
           ParseError.handle(error!) 
         } 
        }) 
       } 
     }) 
    } 
} 

:予期しない関係したクラウド・コードの結果を解析します。 1つのリレーションのみが挿入されます。怒鳴るようなクライアントコールと

var UserGet = function(id, res) { 
var query = new Parse.Query(Parse.User); 
    query.get(id, { 
    success: function(dbUser) { res.success(dbUser); }, 
    error: function(error) { res.error(error); } 
    }); 
} 

Parse.Cloud.define('Relation.friend', function(req, res) { 
    Parse.Cloud.useMasterKey(); 
    var owner = req.user; 
    var query = UserGet(req.params.peerId, { 
    success: function(dbPeer) { 
     var Matrix = Parse.Object.extend("Matrix"); 
     var matrix = new Matrix(); 

     matrix.set("userId", dbPeer); 
     matrix.save(null, { 
      success: function(dbMatrix) { 
        var relation = owner.relation("friend"); 
         relation.add(dbMatrix); 

        owner.save(null, { 
         success: res.success(true), 
         error: res.error("Update.failed") }); 
       }, 
      error: function(_error) { 
       res.error("Save.failed"); 
       } 
     }); 
    }, 
    error: function(_error) { 
     res.error("Query.failed"); 
    } 
    }); 
}); 

は:

func saveRelation(user: User, state: Bool) { 
     PFCloud.callFunctionInBackground("Relation.friend", 
      withParameters: [ "peerId" : user.account.id 
          ]) 
      { (success: AnyObject?, error: NSError?) -> Void in 
       if(error == nil) && (success as? Bool == true) { 
        self.directory.friend.append(user) 

        Trace.log("Relation \(user.account.id)", message: "friend") 
       } 
      } 
    } 

Matrix Class (case #2)Relation (case #1)

すべてのヘルプは大歓迎します。

答えて

0

私は突き刺さずに問題を解決しました。リクエストごとに「req.user」が設定されています。

サーバログを見ると、最初のリクエストだけがリレーションを追加し、2回目のコールはnull値の「req.user」を持ちます。

'content-length': '326', 
connection: 'close' } { 
"friend": { 
    "__op": "AddRelation", 
    "objects": [ 
    { 
     "__type": "Pointer", 
     "className": "_User", 
     "objectId": "kdja9IlKgm" 
    } 
    ] 
} 
} 

'content-length': '217', 
connection: 'close' } {} 
verbose: { 
    "response": { 
    "updatedAt": "2016-04-28T05:25:00.282Z" 
    } 
} 

したがって、私は、任意のコールで照会される2つのパラメータ、「fromId」と「TOID」で私の機能のAPIを変更しました。

クライアント関数呼び出しがそれに応じて変更されます。

func saveRelation(user: User, state: Bool) { 
     PFCloud.callFunctionInBackground("Relation.friend", 
      withParameters: [ 
           "fromId": owner.account.id, 
           "toId" : user.account.id 
          ]) 
      { (success: AnyObject?, error: NSError?) -> Void in 
       if(error == nil) && (success as? Bool == true) { 
        self.directory.friend.append(user) 

        Trace.log("Relation \(owner.account.id) & \(user.account.id)", message: "friend") 
       } else { 
        ParseError.handle(error!) 
       } 
      } 
} 
関連する問題