解析服务器云代码保存对象

Parse Server Cloud Code Save Object

本文关键字:保存 对象 代码 服务器      更新时间:2023-09-26

我正试图查询一个对象,在返回的整数上加1,然后使用解析服务器云代码将此对象保存回我的mLabs数据库。

我可以成功地查询并向我想要的对象添加1,但我不知道如何成功地将其保存回数据库。我已经尝试了许多解决方案,所有这些都导致解析服务器"请求超时"

Parse.Cloud.define("addRating", function(request, response) {
  var currentRatingQuery = new Parse.Query("StudentNotes");
  currentRatingQuery.equalTo("objectId", "Y4bBzvsHb1");
  currentRatingQuery.select("noteRating");
  currentRatingQuery.find({
    useMasterKey: true,
    success: function(results) {
      //var noteRating = results.get("noteRating");
      //noteRating += 1;
      results = Number(results);
      results += 1;
      console.log("NOTE RATINGGGGG: " + results);
      console.log("TYPE OFFFFFFF: " + typeof results);
      results.set('institution', "TEST INSTITUTION");
      results.save(null, {
        useMasterKey: true
      });
      console.log("SAVE SUCCESS", results);
      response.success("rating updated successfully.", results);
    },
    error: function(error) {
      response.error("failed to add 1 to parse cloud code rating. Error: " + error); //THIS GETS CALLED
    }
  });
});

上面的代码成功地查询了数据库,但没有保存回值。它会导致解析服务器"请求超时"。

我的问题与语法有关——由于解析服务器云代码与parse.com云代码非常相似,因此严重缺乏语法。以下是检索对象并将对象保存回的工作代码。

Parse.Cloud.define('addNoteRating', function(request, response) {
  var SaveObject = Parse.Object.extend("StudentNotes");
  var saveObject = new Parse.Query(SaveObject);
  saveObject.equalTo("objectId", request.params.objectId);
  saveObject.first({
    useMasterKey: true,
    success: function(Objects) {
      Objects.save(null, {
        useMasterKey: true,
        success: function(object) {
          object.increment("noteRating");
          object.save();
          console.log("Cloud Code: User note rating has increased by 1.", object);
          response.success('Cloud Code: User note rating has increased by 1.');
        }
      });
    }
  });
});

没有响应可能会导致超时。尝试在api失败时添加响应,看看发生了什么。

顺便说一句,如果你增量成功时响应什么,保存完成时响应什么。

Parse.Cloud.define('addNoteRating', function(request, response) {
  var SaveObject = Parse.Object.extend("StudentNotes");
  var saveObject = new Parse.Query(SaveObject);
  saveObject.equalTo("objectId", request.params.objectId);
  saveObject.first({
    useMasterKey: true,
    //this function will get at most one object
    success: function(object) {
      if(object){
        object.increment("noteRating");
        object.save(null,{
          //do not use master key?
          success: function(note){
            //u should wait the non-blocking call success and finish
            console.log("Cloud Code: User note rating has increased by 1.", object);
            response.success('Cloud Code: User note rating has increased by 1.');
          }, error: response.error
        });
      }else{
        response.error('this student note is not exist');  
          
      }
      
    }, error: response.error  
  });
});

如果这个对象存在,你可以把你的代码重写为

Parse.Cloud.define('addNoteRating', function(request, response) {
  var SaveObject = Parse.Object.extend("StudentNotes");
  var studentNote = new SaveObject();
  studentNote.id = request.params.objectId;
  studentNote.increment("noteRating");
  //student.save(null,{useMasterKey:true}).then(
  studentNote.save().then(
    function(note){
      console.log("Cloud Code: User note rating has increased by 1.", object);
      response.success('Cloud Code: User note rating has increased by 1.');
    }, response.error
  )
});