我正在尝试在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出现问题。
非常感谢任何帮助。
答案 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>