2

我在流星中有一个非常简单的测试应用程序,我创建了一个这样的集合:

var people = new Meteor.Collection("people");

当我尝试做一个简单的插入时,像这样:

people.insert({name: "Benson"});

我收到带有“找不到方法”文本的 404 错误。我承认我很有可能在这里指错了一些东西,但我很想知道哪里出了问题,以及为什么错误如此不透明(即它来自哪里)。

4

2 回答 2

6

这个错误几乎可以肯定意味着您只people在客户端上定义,而不是在服务器上。声明也必须在new Meteor.Collection('people')服务器上运行,否则服务器不知道如何运行您的插入命令。

确保您new Meteor.Collection同时调用客户端和服务器。您是在内部调用它if (Meteor.is_client),还是在client子目录下的文件中调用它?

更多细节:在服务器上,new Meteor.Collection定义了三个远程方法 ( Meteor.methods),用于在命名的 MongoDB 集合中插入、更新和删除文档。在客户端,相同的命令会创建一个内存中的 minimongo 集合,该集合位于浏览器内部,并定义三个存根,通过对 minimongo 集合应用相同的更改来模拟方法。通过仅在客户端上声明集合,您的客户端代码可以很好地运行本地插入,但是当它要求服务器执行真正的插入时,服务器不知道您要求它执行什么方法。

于 2012-04-12T07:18:36.510 回答
1

如果您只想在客户端使用 Collection 并且不需要将该数据保存到服务器,则可以通过将 null 传递给构造函数来在“client”文件夹或 .isClient() 函数中声明您的集合,如下所示:

if(Meteor.isClient()){
// Some other code
...

onlyClientCollection = new Meteor.Collection(null);

// Some other code
...
}
于 2013-09-16T00:18:35.433 回答