Parse platform 解析云-通过objectId获取用户信息

Parse platform 解析云-通过objectId获取用户信息,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,我正在尝试从解析云中的user类获取用户langlang是User类中的一列。我想得到用户的lang。我的整个云代码如下(不起作用): Parse.Cloud.beforeSave('Order',函数(请求,响应){ var orderState=request.object.get('orderState'); var-message=''; var userLang=''; var currentUser=request.object.get('user'); var userQuery=

我正在尝试从解析云中的user类获取用户langlangUser类中的一列。我想得到用户的lang。我的整个云代码如下(不起作用):

Parse.Cloud.beforeSave('Order',函数(请求,响应){
var orderState=request.object.get('orderState');
var-message='';
var userLang='';
var currentUser=request.object.get('user');
var userQuery=newparse.Query(Parse.User);
userQuery.equalTo('objectId',currentUser.id);
.find()
。然后((结果)=>{
userLang=result.get('lang');
})
如果(orderState==未定义的| |['Nonproved'、'approved'、'delivered'、'Cancelled')。索引(orderState)<0){
响应。错误(“OrderState为null或不是['Nonproved'、'approved'、'delivered'、'Cancelled']!”;
}否则{
var query=newparse.query(Parse.Installation);
查询。包括(“用户”);
query.equalTo('user',request.object.get('user');
Parse.Push.send(
{
其中:查询,
数据:{
标题:“我的标题”,
警报:字幕信息
}
},
{
成功:函数(){
},
错误:函数(错误){
响应。错误(error)
},
useMasterKey:对
}
);
回答:success();
}
});

验证您是否确实拥有来自
request.object.get(“用户”)的用户对象外壳currentUser.fetch()
,而不是执行查询,除非您可能需要包含其他对象

因为使用了查询,所以即使只返回一个对象(或者没有,它只是
[]
),结果也是一个数组。所以,您正在执行的是
Array.get(“lang”)
,它不应该做任何事情。尝试
if(results&&results.length>0)user=results[0]
,那么您应该能够访问
user.get(“lang”)


您应该为您的用户类设置ACL/CLP。理想情况下,非用户或非主人的人不应访问这些文件。因此,如果设置正确,您的解决方案可能会将
{useMasterKey:true}
作为查询/获取的选项传递。

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);
  });
});

除了“它没用”之外,你能提供更多的细节吗?例如,是否记录了任何错误或意外行为?另外,看起来您正在承诺处理程序中分配
userLang
,而没有在任何地方使用它。没有错误。当我登录
userLang
时,它得到了
undefined
。我想根据每个用户的首选语言向用户发送推送通知。所以我想从Parse中获取
lang
,我确信我只能从
request.object.get(“user”)中访问用户Id如下所示:
{“objectId”:“xxxxxxxxx”}
。所以我执行了新的查询来访问用户的
lang
username
var userQuery=newparse.query(Parse.user);userQuery.equalTo('objectId',currentUser.id)
只返回一个对象。我认为它应该是
user.get('lang')
而不是
result.get('lang')
。我说的对吗?我试过你的代码,但没有成功。它返回
null
@PirateofMarmara什么是
null
?如果
userLang
null
,则表示用户对象已将
lang
设置为
null
userLang
null
且用户对象未将
lang
设置为
null
。编辑的用户对象。是否为
user
null?我相信,如果用户不存在,Fetch将返回undefined。因此,如果实际上没有一个用户具有该对象id,或者如果该对象上的
user
实际上不是用户指针,则用户将是未定义的。
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);
  });
});