【问题标题】:What does it mean when a Collection insert results in a 404?当 Collection 插入导致 404 时,这意味着什么?
【发布时间】:2013-09-16 08:18:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: meteor


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯,我同意错误信息不符合我们通常的标准。
    • if (Meteor.isServer) { Meteor.startup(function () { console.log("Starting Up"); }); people = new Meteor.Collection("people"); }
    【解决方案2】:

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

    if(Meteor.isClient()){
    // Some other code
    ...
    
    onlyClientCollection = new Meteor.Collection(null);
    
    // Some other code
    ...
    }
    

    【讨论】:

    • 很好的回答:null,解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多