流星:通过DDP
连接两个应用程序时,通过DDP.connect连接两个流星应用在模板助手远程采集无文档需要以下步骤(据我所知):流星:通过DDP
- 发布在远程应用程序收集 经由DDP.connect
- 连接到 远程应用
- 订阅远程采集(同一对象 经由DDP.connect返回)
- 创建一个新的集合蒙哥
- 返回集合的文档中的辅助文件
- 与{{每个集合名}}显示文档模板(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论坛),但找不到连接两个应用程序的推荐结构。
做到这确实是@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文件中。
因此,在我发布10秒后,我得到一个“这个问题没有显示任何研究工作,或者它不清楚或没有用”?如何在10秒内加速阅读我的整篇文章,包括最后一行清楚地表明我已经研究过这个主题?我无法更好地构建我的代码。如果你不想提供任何帮助,那么就继续前进,但不要随意忽视,甚至没有正确阅读帮助请求。 – a4xrbj1
你需要决定你想从哪里连接。服务器或客户端。正如你在代码中所显示的那样,你只在服务器上定义'remote',所以DDP,新的Collection(“名称”,远程)和订阅只能在服务器上进行。这就是你的数据可用的地方。如果你想让它们在客户端创建DDP并直接从客户端订阅到该二进制服务器。如果你希望它是第一个服务器,并将其发布到客户端 - 你需要客户端收集,而不是从服务器端发布,我认为可能是低级别的API。 –
也许如果你正常在客户端创建该集合,没有远程。或者只有客户端为null,但保持名称相同,您将能够在没有低级API的情况下发布它,但我从不需要这种情况。祝你好运,测试它。 –