【问题标题】:Meteor.call not workingMeteor.call 不工作
【发布时间】:2015-09-15 11:10:17
【问题描述】:

在我想将客户端集合查找/插入方法更改为服务器端之前,我已经让这段代码工作了。我从我的流星项目中删除了不安全和自动发布,并将我的代码更改为下面的内容。

client/controllers/item-controller.js 中我的 Angular 代码

    angular.module('prototype').controller('ItemController', ['Config','$window','$meteor', function(Config, $window, $meteor) {

    this.items = function(){
        Meteor.call('getAllItems', function(err, res){
            alert("error: " +err + " res: " + res );
            return res;
        });
    }

server/item-collection-methods.js中的我的物品收集代码

Meteor.methods({
    getAllItems : function(){
        console.log("i got here")
        return Items.find();
    }
});

我在lib/app.js的主文件

Items = new Mongo.Collection("Items");

在我显示 15 个项目之前,现在没有一个显示。

当我将 Meteor.call 函数复制到 chrome 控制台时,我得到的只是undefined

我感觉它要么与项目结构有关,要么与自动发布和不安全被删除的事实有关。任何建议都会有所帮助。

编辑:

我确实在我的服务器控制台中得到了一些东西

I20150629-00:54:54.402(-4)? Internal exception while processing message { msg: '
method', method: 'getAllItems', params: [], id: '2' } Maximum call stack si
ze exceeded undefined

【问题讨论】:

  • 嗯...由于您删除了自动发布,您在服务器上手动发布并订阅 Iron Router 或模板中的数据,对吧?

标签: javascript angularjs meteor


【解决方案1】:

Meteor 数据传输使用发布/订阅系统。该系统能够将存储在 MongoDB(服务器)中的部分或全部数据复制到内存数据库(MiniMongo)中的客户端。 Autopublish 正在客户端上发布所有内容,当您删除它时,您的 Items 集合中没有任何内容了。

为了向客户端发布一些数据,您必须在服务器端声明一个发布:

Meteor.publish('allItems', function () { 
  //collection to publish
  return Items.find({});
});

并在客户端订阅(在路由器或模板中):

Meteor.subscribe('allItems');

要了解有关此系统的更多信息,您可以阅读official docs

关于您的方法“getAllItems”,您不能直接在数据上发送游标 (Items.find()),这就是您收到错误消息“超出最大调用堆栈大小”的原因。 但是您可以通过返回Items.find().fetch() 来发送这些数据的数组。对 Meteor 方法的调用也是异步的,所以你必须使用回调 (more on Meteor methods) 请注意,通过一种方法发送数据(这是完全可以接受的),您将失去发布/订阅系统提供的响应性。

【讨论】:

  • 所以如果我理解正确的话,我所有的“读取”都应该是基于发布/订阅的,所以我可以从更新中获得重新激活行为。我的写入(因为这确实是我想要保护的,只是为了简单起见尝试读取)应该是方法,以便我可以清理输入。
  • Right :) 请注意,您可以保护方法和发布功能,例如通过检查用户是否已登录(如果她具有必要的角色(管理员...)等)
猜你喜欢
  • 2015-10-27
  • 2016-11-12
  • 1970-01-01
  • 2016-08-26
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多