1

在使用单独的客户端和服务器目录时,我正在与 Meteor 作斗争,并希望有人能帮助我。

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

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

我已经尝试过开启和关闭自动发布。

在我的终端窗口中,我可以看到日志语句按我的预期输出了许多项目。但对于我的客户,在浏览器控制台窗口中,我总是看到计数为 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)

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

4

1 回答 1

1

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

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

您可以将此代码放在响应式上下文中,以便正确显示实时计数,例如Meteor.autorunTemplate helper

您看到 503 XHR 错误的原因是当您修改代码并保存它时,meteor 重新启动并尽快提供新内容,因此客户端和服务器之间的套接字暂时中断,直到它刷新页面。您的代码实际上并没有什么问题。

于 2013-02-12T17:19:01.757 回答