Parse.com更新用户Cloud Code给出错误206:无法修改用户

时间:2016-07-22 11:55:31

标签: parse-platform

我正在尝试在Parse Server上编写一个简单的Cloud Code函数来更新用户的参数。我的功能如下:

Parse.Cloud.define("updateUser", function(request, response) {
    var query = new Parse.Query("User");
    query.equalTo("username", request.params.username);
    var type = request.params.type;
    query.first({
        success: function (user) {
            user.set("userType", type);
            user.save(null, {
                success: function (object) {
                    response.success("SUCCESS");
                }, error: function (object, error) {
                    response.error(error);
                }
            });
        }, error: function (error) {
            response.error(error);
        }
    });
});

这就是我从Express Node.js应用程序调用函数服务器端的方法:

Parse.Cloud.run("updateUser", { useMasterKey: true, username: req.body.username, type: req.body.type }, {
    success: function(final) {
        res.send({ res: "SUCCESS" });
    }, error: function(error) {
        res.send({ res: error });
    }
});

第一个查询返回一个用户,但后续的保存会抛出一个" 206:无法修改用户"错误。

此功能在我们以前的平台上运行良好,但现在导致Parse Server出现问题。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

useMasterKey应发送到您的云代码方法的user.save(),并在您的代码中从您的nodeJS应用程序发送useMasterKey。

所以最后你的代码应如下所示:

Parse.Cloud.define("updateUser", function(request, response) {
var query = new Parse.Query("User");
query.equalTo("username", request.params.username);
var type = request.params.type;
query.first({
    success: function (user) {
        user.set("userType", type);
        user.save({useMasterKey : true}, {
            success: function (object) {
                response.success("SUCCESS");
            }, error: function (object, error) {
                response.error(error);
            }
        });
    }, error: function (error) {
        response.error(error);
    }
});

});

我还会根据最佳实践更改我的代码以使用Promises和arrow函数。

希望它有所帮助。

答案 1 :(得分:0)

有一个没有云功能的实现。由于它将是当前登录的客户端,它将更新其“ lastActivity”状态,因此您可以创建一个简单的方法,如下所示:

_lastActivity = () => {
    var currentUser = Parse.User.current();
    currentUser.set("lastActive", new Date());
    currentUser
      .save()
      .then(result => {
        console.log(result);
      })
      .catch(error => {
        console.log(error);
      });
  };

现在,当用户与您的应用程序进行交互时,有时会调用此方法,例如:滑动屏幕或刷新ScrollView组件...或者只要他们的会话处于活动状态,您就可以间隔调用它...您知道什么最有效。

然后,您可以编写查询以获取不是当前用户的所有用户,这取决于您是否要在FlatList组件上进行填充。将结果保存为状态后,只需使用状态中的“ lastActive”数据即可,

使用图标

 <Ionicons name="md-radio-button-on" size={15} 
color={new Date() -item.get("lastActive") < 600000? "green": "red"}/>

图标旁边的文本:

<Text style={{fontWeight:"400",color: "#666",fontSize: 12}}>
  {new Date() - item.get("lastActive") < 600000? "online": "offline"}</Text>

点击查看:Image of How this Implementation looks