在服务器和客户端目录之间拆分文件时声明集合的位置?

时间:2013-02-12 16:55:52

标签: meteor

在使用单独的客户端和服务器目录时,我正在努力使用Meteor,并希望有人可以帮助我。

我在服务器子目录中的服务器代码如下所示:

Testing = new Meteor.Collection("testing");

Testing.insert({hello1:'world1'});
Testing.insert({hello2:'world2'});
Testing.insert({hello3:'world3'});

Meteor.publish("testing", function() {
console.log('server: ' + Testing.find().count());
return Testing.find();
});

客户端子目录中的客户端代码如下所示:

Meteor.subscribe("testing");
var Testing = new Meteor.Collection("testing");
console.log('count: ' + Testing.find().count());

我已尝试使用autopublish开启和关闭。

在我的终端窗口中,我可以看到log语句输出了许多项目,正如我所期望的那样。但对于我的客户端,在浏览器控制台窗口中,我总是看到计数为0。

不确定这是否相关,但是当我修改我的订阅语句并保存更改时,我在控制台窗口中看到此错误:

POST http://localhost:3000/sockjs/574/ukpxre9v/xhr 503 (Service Unavailable) sockjs-    0.3.4.js:821
AbstractXHRObject._start sockjs-0.3.4.js:821
(anonymous function)

我确定我犯了一些愚蠢的错误,但我没有运气跟踪它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您过早运行console.log('count: ' + Testing.find().count()); Meteor会将您的服务器集合同步到客户端,但这需要很短的时间。

例如,您可以在Web控制台中运行console.log('count: ' + Testing.find().count());,它应该会给您一个正确的结果,因为您需要等待半秒左右才能从服务器加载数据。

您可以将此代码放在reactive context中,以便正确显示实时计数,例如Meteor.autorunTemplate helper

您看到503 XHR错误的原因是您修改代码并保存它时,meteor重新启动并尽快提供新内容,因此客户端和服务器之间的套接字会暂时中断,直到刷新页面为止。这对你的代码来说并没有什么不妥。