查询由另一个 Meteor js 应用程序中的应用程序创建的集合

Posted

技术标签:

【中文标题】查询由另一个 Meteor js 应用程序中的应用程序创建的集合【英文标题】:Querying collection created by an app in another Meteor js app 【发布时间】:2017-12-08 07:45:17 【问题描述】:

我有 2 个应用程序查询同一个数据库,它们都在数据库上创建了差异集合。 myapp:3000 的应用程序 A 创建了一个集合 comments,而 myapp:3300 的应用程序 B 在同一数据库 (school) 的末尾创建了 courses。两台服务器都在运行,如何在应用 B 中查询应用 A 创建的集合?

我问这个问题的原因是,作为一个新手,我很容易通过使用全局变量来查询在应用程序中创建的新集合。假设我创建了

UsesList = new Mongo.Collection('useslist');

我可以这样发布:

Meteor.publish('UsesList', function () 
        if (!this.userId) 
            return false;
            throw new Meteor.Error('Not authorized');
         else 
            return UsesList.find();
        
    );

我无法访问此变量,并且我认为直接访问数据库以查询集合可能是不道德的。

【问题讨论】:

两个应用程序是否使用相同的 mongo db 实例/集群作为后端? 【参考方案1】:

在两个不同的应用程序中“创建”同一个集合没有问题。

集合标识由您提供给集合构造函数的名称字符串以及数据库本身的标识决定,当然。

您可以将它们分配给您想要的任何变量标识符,并且它们可能在应用程序之间有所不同。

不过,我建议您开始使用 ES6 模块并减少全局命名空间污染。在学习时开始使用最佳做法,这样您以后就不必忘记那些不好的做法。

所以,只要两个应用都连接到同一个数据库:

// same in app 1 and app 2
import  Mongo  from 'meteor/mongo';
export const UsesList = new Mongo.Collection('user_list');

// and importing it
import  UserList  from '../path/to/other/file';

【讨论】:

我读到这个功能适用于Meteor version 1.3+,我的版本是1.2.1,不敢升级以免破坏东​​西,它不起作用。与版本 1.2.1 相关的任何其他建议。感谢您的大力帮助 所以在没有模块功能的情况下这样做。只需在两个应用程序中以相同的方式定义它。你试过了吗?如果它不起作用,您确定确实使用了 same 数据库吗?当然,不同机器上的两个同名本地DB是不行的。

以上是关于查询由另一个 Meteor js 应用程序中的应用程序创建的集合的主要内容,如果未能解决你的问题,请参考以下文章

如何从子组件更改 react-komposer (meteor) 中的订阅查询参数?

Internet Explorer 将 Meteor.js 应用程序识别为 Intranet 站点。不会加载

MongoDB / Meteor / 将 MONGO_URL 导出到已部署的应用程序

MongoDB / Meteor / 将 MONGO_URL 导出到已部署的应用程序

使用 Meteor.js 的桌面应用程序

Meteor 应用程序没有找到“xhr-sync-worker.js”?