如何在Meteor应用程序之间共享MongoDB集合?

Sam*_*Sam 20 mongodb meteor

我希望能为我的项目提供管理员应用程序和客户端应用程序.理想情况下,我希望能够拥有一个共享的MongoDB集合.我怎么能做到这一点?

我尝试在两个不同的应用程序中创建具有相同名称的集合,但发现Meteor将数据保持独立.知道我能做什么吗?谢谢.

Aar*_*ang 17

export MONGO_URL=mongodb://localhost:3002/meteor
Run Code Online (Sandbox Code Playgroud)

然后运行meteor app,它将改变默认数据库meteor使用.因此共享数据库或集合不会成为问题!出于管理原因,我会使用自己管理的单个MongoDB服务器,而不是使用meteor的内部MongoDB.

  • 注意它现在是3001而不是3002 - 请参阅此主题中的第一个答案:http://stackoverflow.com/questions/14371926/how-is-mongodb-installed-by-meteor (2认同)

mat*_*ias 9

一个合理的问题,可能值得讨论超过这个答案:

MongoDB连接由Meteor应用程序进程本身处理,就我所阅读和理解而言 - 这是Meteors哲学的一部分,其目标可能是:一个数据源服务于属于它的一个应用程序但许多客户订阅它.

考虑到这一点,在一个应用程序(即您的Meteor应用程序)中组合"admin"和"client"客户端可能是首选方式.

但是,从服务器管理视图中,Meteor以这样的方式处理连接,即始终存在驻留在项目目录中的默认本地数据源(.meteor/local/db尝试meteor mongo --url在流星应用程序进程运行时获取mongo连接字符串).但是,可以为部署目的指定可选的数据源字符串,如这些部署说明中所述.

因此,您需要为您的预期设置选择一种有点令人毛骨悚然的"本地开发部署"方式才能开始工作.或者你去破解消息来源......不,忘掉它.您可能希望您的应用程序和客户端利用例如实时UI更新(发布),这就是Meteor应用程序与"应用程序数据源"相关联的原因,反之亦然.从其他应用程序连接时,触发模型更改的事件将不会通过这些应用程序传输.mongoDB实例本身当然不知道这一点.

我确信核心团队不会出于考虑的原因将数据源连接暴露给配置部分,除非他们使用某种模块概念扩展其体系结构,该模块概念提供跨Meteor实例的核心模型/集合抽象的公共服务层 - 在最不支持发布/订阅事件的意识.

  • 谢谢你的有趣阅读.我认为构建URL路由方案似乎偏离了Meteor的简单生产原则.让单独的应用程序访问共享数据库也可以很好地分离关注点(使管理员/登录逻辑与公共端点保持分离). (2认同)
  • 从客户端隐藏包含敏感数据的html也很困难(不可能?).想象一下,例如我有一个"管理员"页面,其中包含我的用户数和我作为管理员查看的所有用户数据.我可以"隐藏"结果,但我在html中可以做的最好的事情是将我的敏感字段名称放在一个测试管理员访问权限的#if块中.但是具有正确js技能的任何人都可以访问模板中的整个html. (2认同)