我是Meteorjs的新手,我正在尝试从已经存在的MongoDB中检索数据。 这是我到目前为止所拥有的:
我将env变量MONGO_URL设置为mongoDB url export MONGO_URL =“mongodb:// username:password @ address:port / dbname”
使用以下代码创建了一个新的meteor项目:
MyCollection = new Meteor.Collection('mycollection');
if (Meteor.isClient) {
//Meteor.subscribe("mycollection");
console.log(MyCollection.findOne());
Template.hello.greeting = function () {
return MyCollection.findOne();
};
}
if (Meteor.isServer) {
Meteor.startup(function () {
// code to run on server at startup
console.log(MyCollection.findOne());
});
}
我知道服务器端console.log(MyCollection.findOne());
正常工作,因为它在终端上打印出正确的数据。
问题在于客户端。当我在浏览器上查看该页面时,数据为空白,console.log(MyCollection.findOne());
显示“未定义”。
我知道autopublish已启用,我不必从服务器端手动发布该集合。
我想知道如何直接从外部mongoDB读取客户端。 如果您有任何建议,请告诉我们!
答案 0 :(得分:0)
即使启用了自动发布,客户端启动和发布的数据之间也存在延迟。在您运行第一个console.log
时,文档尚未完成同步,因此findOne
将返回undefined
。事实证明这不是什么大问题;随着你越来越熟悉流星,你会发现find
操作的结果通常以非时间敏感的方式使用。检查客户端是否有数据的简单方法就是等待页面加载,然后启动浏览器控制台,并手动输入:
console.log(MyCollection.findOne());
至于你的另一个问题,问候语必须是可以用html显示的东西 - 例如一个字符串。它不能是一份文件。假设您的文档具有message
属性,您可以这样做:
return MyCollection.findOne().message;