2013-04-04 69 views
1

,当我运行此:在服务器上遗漏的类型错误,但工作在客户端

var vtop=Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at; 
    console.log(vtop); 

它有一个错误出现:“遗漏的类型错误:无法读取属性未定义‘created_at’”,但是当我运行它在Web控制台上显示出预期的结果,即Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at;

回答

0

在调用数据之前,您需要确保您的订阅已完成。

流星数据在线上发送,所以当您的javascript/html发送时,浏览器尚未被告知从服务器下载数据。

有两种方式这一轮:

如果您使用的是与您的订阅内容,您可以使用Deps.autorun

使用的DEP

Deps.autorun(function() { 
    var subscribed = Session.equals("subscribed",true); 
    if(!subscribed && Posts.find().count()) { 
     Session.set("subscribed",true); 

     var vtop = Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at; 
     console.log(vtop) 
    } 
你尚未达到的阶段

或等待认购完成

服务器JS

Meteor.publish("posts", function() { 
    return Posts.find(); 
} 

客户端JS

Meteor.subscribe("posts",function() { 
    var vtop = Posts.findOne({},{sort: {created_at:-1},reactive:false}).created_at; 
    console.log(vtop) 
}); 

如果使用发布/订阅您需要删除autopublish包,但如果你这样做,你还需要发布的其他类别或浏览器不会看到它们。

更多关于如何使用发布看文档:http://docs.meteor.com/#publishandsubscribe

双方的例子还用到发布,有一个截屏:http://meteor.com/examples/parties

+0

太谢谢你了!第二种解决方案完美运作。 – user1720271 2013-04-05 10:00:26

+0

如果我有足够的声望,我会投你一票lol – user1720271 2013-04-05 10:01:07

+0

不用担心:)很高兴为你工作 – Akshat 2013-04-05 10:49:11

0

我会在该行代码处添加一个断点,并在您的JavaScript引擎即将运行时查看Posts集合中的内容。我的猜测是,你的Posts集合在之后正在加载文档它遇到了该行代码。当您使用Web控制台进行检查时,它的工作原因是因为在文档加载的时候。

相关问题