流星:发布/订阅不起作用



我一辈子都不明白为什么这个流星应用程序的客户端没有显示任何内容。我尝试了所有相关话题的所有建议,但似乎都不起作用。我使用的是msavin:mongol,我甚至根本看不到客户端上的订阅,尽管console.log((调试输出表明它与当前的条目数量在一起。

/imports/api/friends.js:

export const Friends = new Mongo.Collection('friends');
Friends.deny({ insert() { return true; }, update() { return true; }, remove() { return true; } }); // access to collections only through method calls

/imports/api/server/friends.js:

import { Meteor } from 'meteor/meteor';
import { Friends } from '../friends.js';
Meteor.publish('friends.all', function(){
return Friends.find();
})

/imports/ui/pages/friends.js:

import { Friends } from '/imports/api/friends.js';
import './friends.html';

Template.friends.onCreated(function() {
this.subscribe('friends.all');
});
Template.friends.helpers({
friends: ()=>{ return Friends.find(); }
});

/imports/ui/pages/friends.html:

<template name="friends">
<h1 class="ui header">Friends</h1>
{{#if Template.subscriptionsReady}}
<h2 class="ui heder">friends list:</h2>
<div class="ui list">
{{#each friend in friends}}
<div class="item">{{friend.name}} ({{friend.email}})</div>
{{/each}}
</div>
{{/if}}
</template>

"friends list"标头显示,因此subscriptionsReady调用返回,但我没有得到任何数据(已验证数据是否存在于数据库中(。

我还尝试过将订阅移动到路由器中(使用ostrio:flow router extra(,当我添加订阅时,waitOn((函数永远不会返回

这是怎么回事?

如果您错过了在服务器上包含您的发布,那么您的客户端订阅将立即"就绪",但不会出现错误消息。

在创建具有模板级订阅的模板时,这可能会导致很多混乱。

为了检查发布是否存在,可以在启动(未记录的(server.publish_handlers阵列后在服务器上使用。它保存注册出版物的记录。

Meteor.startup( () => {
console.log( Meteor.server.publish_handlers );
});

如果你已经设计好你的api来跟踪它的预期发布,那么这就非常方便了:

friendsdef.js

// definition file for Friends collection and it's
// surrounding functionality
export const FriendsDef = {
collectionName: 'friends',
schema: { ... },
methods: { ... },
publications: {
all: {
name: 'friends.all'
}
}
}

someServerStartup.js

// make sure on startup, that all intended
// publications are registered
Meteor.startup( () => {
Object.values( FriendsDef.publications).forEach( pub => {
if (!Meteor.server.publish_handlers[pub.name]) {
throw new Error('publication should exist, but does not');
}
});
});

对于方法,method_handlers也是如此。将这些数据结构与定义良好的API一起使用,您将大大减少缺少包含或拼写错误名称的错误。

最新更新