2016-01-28 158 views
1

连接两个应用程序时,通过DDP.connect连接两个流星应用在模板助手远程采集无文档需要以下步骤(据我所知):流星:通过DDP

  1. 发布在远程应用程序收集
  2. 经由DDP.connect
  3. 连接到 远程应用
  4. 订阅远程采集(同一对象 经由DDP.connect返回)
  5. 创建一个新的集合蒙哥
  6. 返回集合的文档中的辅助文件
  7. 与{{每个集合名}}显示文档模板(HTML文件){{/每}}

我有两个应用程序(一个远程连接到MongoDB,一个小得多的处理所有前端交互)。我可以成功地管理他们通过连接(步骤2 & 3 - 该代码是在一个文件中lib文件夹名为_connect.js,以确保它之前该文件夹中的任何其他代码执行):

if (Meteor.isServer) { 
    if (process.env.NODE_ENV === 'development') { 
     // development environment 
     worker_host = 'localhost:4000';  // ip address of job worker host 
     // connect to job worker 
     remote = DDP.connect(worker_host); 
    } 
    remote.subscribe('cards', function() { 
     console.log('Number of docs: ' + Cards.find().count()); 
    }); 
} 

,它当我使用remote.subscribe时,还会显示预期文档的数量。 这是代码中唯一显示正确文档数量的地方,其中显示0的任何地方。

卡片集合已正确发布到远程服务器(运行在端口4000上)通过(步骤1):

Meteor.publish('cards', function() { 
    return Cards.find() 
}); 

第4步:我不确定在哪里放置此代码。这是目前在lib文件夹,以便收集是知名的客户端和服务器:

Cards = new Mongo.Collection('cards',remote); 
console.log('Number of docs: ' + Cards.find().count()); 

它总是显示为0的文档执行该代码时。

然而,当我要访问模板帮手相同的(远程)集(第5步 - 文件是client文件夹):

Template.puzzle.helpers({ 
    cards: function() { 
     console.log('Number of docs: ' + Cards.find().count()); 
     return Cards.find(); 
    } 
}); 

没有一个文档在助手代码发现。

基于上述原因没有显示在HTML模板(也client文件夹):

<template name="puzzle"> 
    <div class="container"> 
     {{#each cards}} 
      // lot's of <div> displaying the content of the cards doc 
     {{/each}} 
    </div> 
</template> 

很显然,我必须忽视的东西很简单,我怀疑这就是我的相关代码是放置。

上述代码的哪些步骤需要更改才能访问远程集合?我检查了通常的源代码(SO,Meteor论坛),但找不到连接两个应用程序的推荐结构。

PS:我读过Connect two Meteor applications using DDP

+0

因此,在我发布10秒后,我得到一个“这个问题没有显示任何研究工作,或者它不清楚或没有用”?如何在10秒内加速阅读我的整篇文章,包括最后一行清楚地表明我已经研究过这个主题?我无法更好地构建我的代码。如果你不想提供任何帮助,那么就继续前进,但不要随意忽视,甚至没有正确阅读帮助请求。 – a4xrbj1

+1

你需要决定你想从哪里连接。服务器或客户端。正如你在代码中所显示的那样,你只在服务器上定义'remote',所以DDP,新的Collection(“名称”,远程)和订阅只能在服务器上进行。这就是你的数据可用的地方。如果你想让它们在客户端创建DDP并直接从客户端订阅到该二进制服务器。如果你希望它是第一个服务器,并将其发布到客户端 - 你需要客户端收集,而不是从服务器端发布,我认为可能是低级别的API。 –

+0

也许如果你正常在客户端创建该集合,没有远程。或者只有客户端为null,但保持名称相同,您将能够在没有低级API的情况下发布它,但我从不需要这种情况。祝你好运,测试它。 –

回答

0

做到这确实是@Robert西蒙提出的正确方式,作出决定,在服务器或只在客户端上运行它。由于我需要通过客户端显示集合的内容,因此所有内容都必须移至客户端。

这些是使它工作的编辑:

步骤2/3(移动_connect.js文件夹client

worker_host = 'localhost:4000';  // ip address of job worker host 

// connect to job worker 
remote = DDP.connect(worker_host); 
remote.subscribe('cards', function() { 
    console.log('Number of cards1: ' + Cards.find().count()); 
}); 

步骤4(移动cards.js文件到client文件夹:

Cards = new Mongo.Collection('cards',remote); 

当作为应用程序,通过它运行如此之快,puzzle.js文件(助手)执行第一次它没有显示任何卡没有T通过DDP传输数据已经发生。在随后的第二次运行中,所有文档都在助手中接收并显示在html文件中。