Javascript Meteor.publish回调未被调用
我有一个非常简单的项目,只有一个Meteor.publish调用:Javascript Meteor.publish回调未被调用,javascript,meteor,Javascript,Meteor,我有一个非常简单的项目,只有一个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],
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”,而如果我在一个示例项目中尝试相同的方法,它会同时打印这两种代码
注意:我删除了autopublish软件包。在路径(
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');
你需要在客户端订阅它。这是我的工作:
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
。如果它仍然引发对“框”的权限或访问的异常,则您必须在您的项目/shared/collections.js中添加以下代码<代码>盒子=新流星系列(“盒子”);allow({insert:function(){return true;},update:function(){return true;},remove:function(){return true;}})代码>如果需要,请查看我之前的类似内容。是的,只有当用户实际请求数据时才调用发布回调是有意义的。我的问题与此无关