使用Meteor.methods和Meteor.call

时间:2013-03-22 21:10:21

标签: javascript meteor

我有以下服务器代码:

Meteor.startup(function () {
  Meteor.publish("AllMessages", function() {
    lists._ensureIndex( { location : "2d" } );
    return lists.find();
  });
});

Meteor.methods({
  getListsWithinBounds: function(bounds) {
    lists._ensureIndex( { location : "2d" } );
    return lists.find( { "location": { "$within": { "$box": [ [bounds.bottomLeftLng, bounds.bottomLeftLat] , [bounds.topRightLng, bounds.topRightLat] ] } } } );
  }
});

和此客户端代码:

Meteor.startup(function () {
  map = L.map('map_canvas').locate({setView: true, maxZoom: 21});
  L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
      attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
  }).addTo(map);
    bounds = {};    
    map.on('locationfound', function(e){ 
      bounds.bottomLeftLat = map.getBounds()._southWest.lat;
      bounds.bottomLeftLng = map.getBounds()._southWest.lng;
      bounds.topRightLat = map.getBounds()._northEast.lat;
      bounds.topRightLng = map.getBounds()._northEast.lng;
      console.log(bounds);
      Meteor.call("getListsWithinBounds", bounds, function(err, result) {
        console.log('call'+result); // should log a LocalCursor pointing to the relevant lists
      });
    });
});

我上了服务器日志:

Internal exception while processing message { msg: 'method',
  method: 'getListsWithinBounds',
  params: 
   [ { bottomLeftLat: 50.05008477838258,
       bottomLeftLng: 0.384521484375,
       topRightLat: 51.63847621195153,
       topRightLng: 8.3221435546875 } ],
  id: '2' } undefined

但我无法弄清楚为什么......

1 个答案:

答案 0 :(得分:16)

您无法返回Collection游标 - 它无法转换为EJSON对象。将查询结果作为数组返回。

e.g。

return Lists.find(...).fetch();