无法从Parse.Query中检索包含的对象

时间:2015-12-29 09:53:19

标签: javascript json parse-platform

我遇到了关于Parse.Query的问题以及如何分解结果的承诺。这是我目前的代码:

var ga = new Parse.Query(Game);
ga.include('away_team');
ga.include('home_team');
ga.equalTo("objectId", req.params.id);
ga.find().then(function(result){
  console.log(result[0]);
});

该控制台日志输出如下内容:

{
  "home_team" : {"name":"Dallas Stars", "arena":"American Airlines Center"},
  "away_team" : {"name":"New York Rangers", "arena":"Madison Square Garden"},
  "createdAt" : "2015-12-28T10:35:35.541Z"
}

我的问题是,如何从我的承诺函数中的away_team获取名称?如果我将console.log行更改为console.log(results[0].createdAt)。我的控制台按预期输出了2015-12-28T10:35:35.541Z。但是如果我将该行进一步更改为console.log(results[0].away_team)我的控制台日志没有提供消息

这显然是错的,在我的世界(在我的脑海里)它会回来的 {"name":"New York Rangers", "arena":"Madison Square Garden"}

但好吧,好吧,我真的不需要那条线,但我需要的是从中检索名字。当我尝试以下行时:console.log(results[0].away_team.name)我收到错误说结果:TypeError:无法读取未定义的属性'name'

我可以在我的.jade模板中执行此操作(results.away_team.name),如果我使用JSON.serialize()将其发送到视图,并在我的视图中使用JSON.parse()解析它。如果我尝试在我的路由器类中执行此操作,则会在...中意外的u标记意外的o标记...

我的目标是根据我正在浏览的当前游戏中的主队和客场球队向我的观点发送正确的标题:

res.render('inside/game', {
  title: result[0].away_team.name + " vs. " + result[0].home_team.name
  // title: New York Rangers vs. Dallas Stars
});

我是否尝试过一些不适合在路由类中工作的东西?

1 个答案:

答案 0 :(得分:1)

find的结果是一个解析对象,而不是JSON。您的解决方法是获取该对象并通过JSON文本将其转换为纯JS对象,这不是很好但可行。

解析对象无法直接访问大多数内容,因为它们没有明确定义的任意键方法。相反,您需要使用get函数。

result[0].get("home_team")

您可以链接name的后续请求或将结果存储到var中,以便您可以有效地解压缩多个数据。