流星客户端访问现有的mongoDB

时间:2014-02-02 03:46:02

标签: javascript mongodb meteor

我是Meteorjs的新手,我正在尝试从已经存在的MongoDB中检索数据。 这是我到目前为止所拥有的:

  1. 我将env变量MONGO_URL设置为mongoDB url export MONGO_URL =“mongodb:// username:password @ address:port / dbname”

  2. 使用以下代码创建了一个新的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());
        }); 
    }
    
  3. 我知道服务器端console.log(MyCollection.findOne());正常工作,因为它在终端上打印出正确的数据。

    问题在于客户端。当我在浏览器上查看该页面时,数据为空白,console.log(MyCollection.findOne());显示“未定义”。

    我知道autopublish已启用,我不必从服务器端手动发布该集合。

    我想知道如何直接从外部mongoDB读取客户端。 如果您有任何建议,请告诉我们!

1 个答案:

答案 0 :(得分:0)

即使启用了自动发布,客户端启动和发布的数据之间也存在延迟。在您运行第一个console.log时,文档尚未完成同步,因此findOne将返回undefined。事实证明这不是什么大问题;随着你越来越熟悉流星,你会发现find操作的结果通常以非时间敏感的方式使用。检查客户端是否有数据的简单方法就是等待页面加载,然后启动浏览器控制台,并手动输入:

console.log(MyCollection.findOne());

至于你的另一个问题,问候语必须是可以用html显示的东西 - 例如一个字符串。它不能是一份文件。假设您的文档具有message属性,您可以这样做:

return MyCollection.findOne().message;