我正在尝试从Parse Cloud中的用户类获取用户信息。 lang 是用户类中的一列。我想得到用户的 lang 。我的整个Cloud Code如下(它不起作用):
Parse.Cloud.beforeSave('Order', function(request, response) {
var orderState = request.object.get('orderState');
var subtitleMessage = '';
var userLang = '';
var currentUser = request.object.get('user');
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo('objectId', currentUser.id);
.find()
.then((result)=>{
userLang = result.get('lang');
})
if (orderState === undefined || ['nonApproved', 'approved', 'delivered', 'canceled'].indexOf(orderState) < 0) {
response.error("OrderState is null or not one the ['nonApproved', 'approved', 'delivered', 'canceled']!");
} else {
var query = new Parse.Query(Parse.Installation);
query.include('user');
query.equalTo('user', request.object.get('user'));
Parse.Push.send(
{
where: query,
data: {
title: "MyTitle",
alert: subtitleMessage
}
},
{
success: function() {
},
error: function(error) {
response.error(error)
},
useMasterKey: true
}
);
response.success();
}
});
答案 0 :(得分:1)
Jake T.的答案有一些好处。根据他的回答和你对这个问题的评论,你可以尝试这样的事情:
Parse.Cloud.beforeSave('Order', function(request, response) {
var currentUser = request.object.get('user');
currentUser.fetch({useMasterKey: true}).then(function(user) {
var userLang = user.get('lang');
// send push notifications based on userLang here
response.success();
}).catch(function(error) {
// handle any errors here
console.error(error);
});
});
答案 1 :(得分:0)
验证您实际拥有来自request.object.get("user");
的用户对象shell,如果这样做,您只需调用currentUser.fetch()
而不是执行查询,除非您可能需要包含其他对象。< / p>
由于您使用了查询,因此结果是一个数组,即使只返回一个对象(或者没有,它只是[]
)。所以,你正在做Array.get("lang")
,它不应该做任何事情。试试if( results && results.length > 0 ) user = results[0];
,然后您就可以访问user.get("lang");
您应该为User类设置ACL / CLP。理想情况下,非用户或主人不应访问这些内容。因此,如果设置正确,您的解决方案可能会将{useMasterKey:true}
作为选项传递给查询/获取。