如何将 Meteor 站点连接到现有的数据库和集合?



我有服务器和客户端文件,正在尝试将一些数据发送到Javascript而不是模板。在模板中,我可以输出一些值,但我需要在 JS 中使用它来向 Leaflet 添加标记。

我想,通过模板将数据汇集到JS和Leaflet中是没有意义的,对吧?

我做错了什么?

$ mongo
MongoDB shell version: 2.4.9
connecting to: test
> use atms
switched to db atms
> db.markers.count()
1868

运行服务器:

$ MONGO_URL=mongodb://127.0.0.1:27017/atms meteor

库/集合.js

Markers = new Meteor.Collection('markers');

在客户端/客户端.js中,我尝试从集合中获取记录,但它是空的:

Template.hello.helpers({
    marks: function () {
        // this data renders correctly on map
        return Markers.findOne({})
    }
});
Template.hello.onRendered(function() {
    // this data is empty in console
    var query = Markers.find().fetch();
    console.log(query);
});

在模板中,它显示一条记录,这意味着连接有效。但是控制台输出是[].

主要问题是客户端和服务器上有 2 个不同的Markers集合。因此,在客户端上,meteor访问客户端标记集合,并且不显示任何数据。集合定义应在客户端和服务器之间共享,而不是重复。

创建一个文件夹lib并将集合定义放在那里

//lib/collections.js
Markers = new Mongo.Collection('markers')

并删除serverclient文件夹中的集合定义。

另外,请注意,当您使用分离的mongo实例时,反应性将非常缓慢(与嵌入式mongo相比是 2 或 3 倍)

很确定这在这里得到了回答:

将多个Mongodb数据库与Meteor一起使用.js

只是关于语法的注释,在版本 1.2.1 中,您希望将 Meteor 集合声明为全局变量,以便可以在您键入的文件之外访问它。 此外,您希望将此行放在/lib 或客户端和服务器都可以访问的目录中。

Markers = new Mongo.Collection('markers')

最新更新