繁体   English   中英

解析服务器javascript SDK更新用户详细信息

[英]Parse Server javascript SDK Updating User Details

我正在尝试使用Javascript SDK从客户端Web应用程序更新Parse Server用户。

我知道使用Parse.User是不可能的,但是使用Parse.Object是可能的。 我正在按照更新对象的指导进行操作,但似乎无法理解该函数的第三行。

function () {
    var updateTheUser = Parse.Object.extend("_User");
    var query = new Parse.User.current();
    query.get(Parse.User.current().id, {
        success: function (update) {
            // The object was retrieved successfully.
            update.set("phone", "01234 567890");
            update.set("Barred", false);
            update.save(null, {
                success: function (update) {
                    console.log("Updated!");
                            }
                        });
                    },
                error: function (object, error) {
                    // The object was not retrieved successfully.
                    // error is a Parse.Error with an error code and message.
                }
            });
        };
    };

嵌套回调很容易出错,如您在代码中所见。 您认为处理未收回对象的回调实际上处理了失败的保存。

请尝试以下操作,然后查看控制台中显示的内容(注意:如果没有babel,可能无法在IE中使用):

const asPromise = (fn,context,args) => {
  return new Promise(
    (resolve,reject) => {
      args.concat(
        {
          success:resolve,
          error:(o,e) => reject([o,e])
        }
      );
      fn.apply(context,args);
    }
  );
};
var updateTheUser = Parse.Object.extend("_User");
var query = new Parse.User.current();
//maybe query should be:
// var query = new Parse.Query(User);
// from documentation: http://docs.parseplatform.org/js/guide/#retrieving-objects
asPromise(query.get,query,[Parse.User.current().id])
.then(
  update => {
    update.set("phone", "01234 567890");
    update.set("Barred", false);
    return asPromise(
      update.save,
      update,
      [null]
    )
  }
)
.then(
  user => console.log("updated user:",user)
  ,error => console.warn("Something went wrong:",error)
);

只有这应该工作:

var user = Parse.User.current();
user.set("phone", "01234 567890");
user.set("Barred", false);
user.save(null, {
    success: function (update) {
        console.log("Updated!");
    },
    error: function (error) {
        console.log(error);
    }
});

我能够解决此问题的唯一方法是使用REST API进行AJAX请求

updateUser = function () {

    var userId = Parse.User.current().id;
    var data = JSON.stringify({
        "username": username,
        "firstname": firstname,
        "lastname": lastname,
        "email": email,
        "phone": phone
    });

    $.ajax({
        url: 'myServerURL' + userId,
        type: 'PUT',
        headers: {
            'X-Parse-Application-Id': "my_api",
            'X-Parse-Master-Key': "my_masterkey",
            'Content-Type': "application/json"
        },
        "data": data,
        success: function (result) {
            // Do something with the result
            alert("you have successfully updated your account.  We're now going to need you to log back in with your new details?");

            Parse.User.logOut();
            window.location.href = "/#/login";
        },
        error: function (Response) {
            alert(Response.error);
        }
    });
};

警告:因为它包含主密钥,所以它应该位于Parse Server上的Cloud Code中,而不是Web应用程序中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM