gpt4 book ai didi

javascript - Meteor:通过 DDP 连接两个应用程序时,模板助手中没有来自远程集合的文档

转载 作者:行者123 更新时间:2023-11-28 06:26:55 25 4
gpt4 key购买 nike

通过 DDP.connect 连接两个 Meteor 应用程序需要执行以下步骤(据我所知):

  1. 在远程应用上发布集合
  2. 通过 DDP 连接。连接到远程应用程序
  3. 订阅远程集合(与通过 DDP.connect 返回)
  4. 创建新的 Mongo 集合
  5. 返回帮助文件中集合的文档
  6. 使用 {{each collectionName}} {{/each}} 显示模板(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。

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

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

最佳答案

正确的方法确实是@Robert Simon所建议的,决定是仅在服务器上运行还是仅在客户端上运行。由于我需要通过客户端显示集合的内容,因此所有内容都必须移至客户端。

以下是使其发挥作用的编辑:

第 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 文件(助手)第一次执行时,它不会显示任何卡片,因为应用程序运行得如此之快,以至于没有通过 DDP 传输数据。在随后的第二次运行中,所有文档都会在帮助程序中接收并显示在 html 文件中。

关于javascript - Meteor:通过 DDP 连接两个应用程序时,模板助手中没有来自远程集合的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35053822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com