Javascript 无法从meteor中的客户端访问集合
我有一个Meteor应用程序,我在其中声明了一个集合Javascript 无法从meteor中的客户端访问集合,javascript,meteor,Javascript,Meteor,我有一个Meteor应用程序,我在其中声明了一个集合 imports/api/Dictionary.jsx 在该文件中: export const dict = new Mongo.Collection('Dictionary'); 然后将其导出并尝试提取客户端文件夹中的数据: import { Meteor } from 'meteor/meteor'; import {dict} from "../imports/api/Dictionary.jsx"; Meteor.startup(
imports/api/Dictionary.jsx
在该文件中:
export const dict = new Mongo.Collection('Dictionary');
然后将其导出并尝试提取客户端文件夹中的数据:
import { Meteor } from 'meteor/meteor';
import {dict} from "../imports/api/Dictionary.jsx";
Meteor.startup(() => {
console.log(dict.find().fetch());
});
但控制台上什么也没有显示。我已经尝试导入和获取服务器和端,一切正常。我还安装了autopublish软件包。订阅从服务器接收文档需要一点时间。几秒钟后再试一次
设置自己的发布后,订阅收到发布的完整快照后,您可以使用ready回调来执行操作。即使使用autopublish,该集合也不会在客户端启动时立即可用。根据收集的大小,可能需要一段时间。当您使用显式发布订阅时,通常可以等到订阅准备就绪后再尝试访问它 使用autopublish,您可以尝试:
Meteor.startup(() => {
Meteor.setTimeout(() => {
console.log(dict.find().fetch());
},
1000);
);
});
虽然如果您的收藏量很大,您可能需要使用大于1000的数字
真正的答案是:
ready()
我要做的不是导入和导出,而是 在不在客户端或服务器文件夹中的文件中
this.Dictionary = new Mongo.Collection(“Dictionary”)
在Meteor中,您可以声明全局变量您是否尝试过发布?安装autopublish软件包后是否需要使用发布?您是否在客户端导入了
imports/api/Dictionary.jsx
?顺便问一下,为什么在Mongo集合文件后面加上“jsx”后缀?这是一个标准的JavaScript文件,不是React文件。对不起,当我写了很多前端内容时,这是我的坏习惯。这里的问题是,我安装了autopublish,但不知怎么的,它只在服务器端工作,我也尝试使用mongol,它显示了正确的查询,但我不确定它是使用服务器端还是客户端@GhokanKaradag思考autopublish的功能。没有任何发布/订阅,就没有客户收集数据。谁否决了你,谁就错了。使用订阅onReady
回调或autorun
是正确的答案,即使安装了autopublish
。实际上,指定数据何时到达要比设置超时好得多,我可以让meteor在启动时(不仅仅是特定时间)等待完成订阅收集吗?只有创建命名订阅时,才能使用autopublish。