为什么Parse服务器正在创建新对象而不是更新?

时间:2017-08-19 12:25:54

标签: parse-platform parse-server

我在NodeJS环境中使用express。

运行解析服务器

通常,Parse会自动确定哪些数据已更改,因此只会将“脏”字段发送到Parse Cloud。所以,我不需要担心压缩我不打算更新的数据。

但是为什么以下代码每次都会保存新数据,而不是使用名称" Some Name"来更新现有文档数据。

// Parse code

Parse.initialize(keys.parseAppID);
Parse.serverURL = keys.parseServerURL;

var GameScore = Parse.Object.extend("GameScore");
var gameScore = new GameScore();

let data = {
    playerName: "Some Name",
    score: 2918,
    cheatMode: true
};



gameScore.save(data, {
            success: (gameScore) => {
                // let q = new Parse.Query("GameScore");
                // q.get(gameScore.id)
                console.log("ID: " + gameScore.id)

            },
            error: function (gameScore, error) {
                // Execute any logic that should take place if the save fails.
                // error is a Parse.Error with an error code and message.
                alert('Failed to create new object, with error code: ' + error.message);
            }
        });




// End of Parse code

1 个答案:

答案 0 :(得分:1)

问题是您正在执行查询以查找要更新的对象,但是当您去保存data时,您没有使用结果。

query.first({ // This will result in just one object returned
    success: (result) => { 
        // Check to make sure a result exists
        if (result) {
            result.save(data, {
                // Rest of code

注意:您将playerName视为唯一键。如果多个用户可以拥有相同的playerName属性,则会出现错误。您可以使用id代替保证唯一的id。如果您使用var GameScore = Parse.Object.extend("GameScore"); var gameScore = new GameScore(); gameScore.id = "ID"; // This id should be the id of the object you want to update ,则可以使用Parse.Query.get

编辑: 由于您要更新现有对象,因此必须指定其ID。

$(document).on('input', '.inps', function(event) {

  $(this).attr('type', 'tell');

  function showpanel() {
    $('.inps').attr('type', 'password');
    $(this).attr('type', 'tell');
  }

  // use setTimeout() to execute
  setTimeout(showpanel, 1000);

  // check for hyphen
  var myLength = $(this).val().trim().length;
  if (myLength == 1) {
    $(this).next('.inps').focus();
    $(this).next('.inps').val('');
  }
});