在Meteor 0.6.5中的Package中导出MongoDB符号

时间:2013-08-15 21:42:51

标签: package meteor

我需要在Meteor中使用MongoDB驱动程序,因为我想在我的应用程序中使用Grid。在Meteor 0.6.5之前,我设法将一个mongodb作为一个包,它运行良好。

但是在更新之后,使用新的Package系统,我无法使其工作。这是我的package.js(在myAppFolder/packages/mongodb/中),我也做了meteor add mongodb

Package.describe({
    summary: "Mongodb driver"
});

Npm.depends({'mongodb': '1.3.18'});

Package.on_use(function(api){
    MongoDB = Npm.require("mongodb");
    console.log(MongoDB, '--------------');

    api.export('MongoDB', 'server');
});

我可以看到控制台日志在我启动服务器时打印了一些东西,但是在运行时的应用程序代码中,MongoDB的值是未定义的,Package.mongodb.MongoDB也是如此。在我看来,这些值以某种方式分配给未定义。

如果有人知道如何在mongo-livedata包中使用已包含的MongoDB驱动程序,那将是一个更好的解决方案。

1 个答案:

答案 0 :(得分:1)

如果你在package.js文件中这样做,我觉得它不起作用;看起来你必须使用一个单独的文件。我通过以下方式做了类似的事情来获取csv包:

package.js

Npm.depends({
    csv: "0.3.5"
});

Package.on_use(function (api) {
    api.add_files('server.js', 'server');

    api.export('csv');
});

server.js

csv = Npm.require('csv');

这是Meteor 0.6.5+特定的。他们现在在文档中有一个部分:http://docs.meteor.com/#writingpackages

就像你说的那样,你应该能够Npm.require Meteor已经使用的同一个mongodb包,并保存额外的npm安装。例如,mongo-livedata包导出名为MongoInternals的内容,您可以深入了解它并找出如何拔出mongo驱动程序:

https://github.com/meteor/meteor/blob/devel/packages/mongo-livedata/package.js