我有一个非常简单的项目,只有一个Meteor.publish调用:
Boxes = new Meteor.Collection("boxes");
if (Meteor.isServer) {
Meteor.startup(function () {
Boxes.remove({}) //clearing the database
Boxes.insert({ //adding one element to the database
boxes: [1],
currentId: 1
});
});
console.log("publish1")
Meteor.publish("boxes", function() {
console.log("publish2") //this does not run! ever!
return Boxes.find();
});
}
由于某些原因,我的Meteor.subscribe似乎不起作用(集合总是返回空),所以我在我的代码中放了几个console.log。由于某种原因,我的服务器代码打印" publish1"但它不打印" publish2",而如果我在示例项目中尝试相同,它会打印两者。
注意:我删除了自动发布包。
答案 0 :(得分:2)
您需要在客户端订阅它。这项工作对我来说:
Boxes = new Meteor.Collection("boxes");
if (Meteor.isServer) {
Meteor.startup(function () {
Boxes.remove({}) //clearing the database
Boxes.insert({ //adding one element to the database
boxes: [1],
currentId: 1
});
});
console.log("publish1")
Meteor.publish("boxes", function() {
console.log("publish2") //this does not run! ever!
return Boxes.find();
});
}
if(Meteor.isClient){
Meteor.subscribe('boxes');
}
publish2
仅在您在浏览器中打开应用时打印。
答案 1 :(得分:0)
在路径(your_project/server/
)中创建一个单独的JavaScript文件publish.js
,并将发布功能放在该文件中。
Meteor.publish("boxes", function() {
console.log("publish2") //this does not run! ever!
return Boxes.find();
});
然后在客户端的相应JS文件中将此发布订阅为
Meteor.subscribe('boxes');