【问题标题】:Iron router data findOne returning undefined铁路由器数据findOne返回未定义
【发布时间】:2015-03-08 04:34:53
【问题描述】:

我有一个streams 发布和订阅设置,但由于某种原因,如果我在路由中执行以下操作,视图将不会获得数据:

Router.route '/seasons/:season/episodes/:episode',
    name: 'episode'
    action: ->
        @render(
            'episode',
            data: ->
                Streams.findOne({season: @params.season, episode: @params.episode})
        )

如果我按预期记录它们在那里的参数,并通过数据库或浏览器控制台手动执行findOne,则按预期返回数据。

如果我删除参数所以它只是 Streams.findOne() 数据返回数据库中的第一个 stream 并且视图可以按预期访问它。我真的不确定这里发生了什么。

【问题讨论】:

    标签: meteor iron-router


    【解决方案1】:

    在尝试访问数据之前,您可能需要等待您的流发布:Meteor 中的 Pub/Sub 机制是异步的,当您订阅一些数据时,您不会立即将其返回到浏览器中,因为底层客户端/服务器延迟。

    尝试按如下方式重新组织您的代码:

    Router.route '/seasons/:season/episodes/:episode',
      name: 'episode'
      template: 'episode'
      data: ->
        Streams.findOne({season: @params.season, episode: @params.episode})
      waitOn: ->
        Meteor.subscribe 'streams', @params.season, @params.episode
    

    【讨论】:

    • 现在我收到此错误Exception from sub 6hdDJSYJHkEpP5yS3 Error: Did not check() all arguments during publisher 'episodes' 我返回的数据已略有更改以返回如下对象:{ episode: Episodes.findOne({season: 3, episode: 1}), games: Games.find({season: 3, episode: 1})}。我尝试在此coderwall.com/p/yhpn9a/… 之后等待两者,但仍然出现错误。
    • 我发现参数是作为字符串返回的,但是我正在查找的 mongo 中的数据是数字,我只是添加了:parseInt(@params.season, 10)。这听起来像是一个合理的错误还是我错过了其他东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多