无法访问棱角流星中的集合

Cannot access a collection in Angular-Meteor

本文关键字:集合 流星 访问      更新时间:2023-09-26

我正在尝试使用Angular-Meteor中集合中的数据,但到目前为止我无法访问它。

lib/collections 中.js我定义了集合:

UserMeta = new Mongo.Collection('userMeta');

服务器/发布.js发布它:

Meteor.publish('userMeta', function() {
  return UserMeta.find();
});

在我的客户端代码客户端/脚本/控制器/settings.controller中.js我订阅:

angular
  .module('App')
  .controller('SettingsCtrl', SettingsCtrl);
function SettingsCtrl($scope, $reactive) {
  $reactive(this).attach($scope);
  this.subscribe('userMeta');
  //...
}

我发现似乎有多种订阅方式(甚至在 Angular-Meteor 的官方教程中使用不一致(,但我决定使用 v.1.3.2 的最新语法: 订阅 API

但是如果我想查看集合的全部内容,它会返回一个空数组:

console.log(UserMeta.find().fetch()); // =[]

或:

console.log(UserMeta.findOne()); // =undefined

但是,如果我在浏览器中的客户端控制台中运行这些命令,则会返回预期的结果。

有人可以给我一个简短的例子,我如何使用我的收藏吗?我已经习惯了(纯(流星处理这个问题的方式,并且对它在棱角流星中似乎没有那么简单感到困惑。

尝试使用

Meteor.Methods

在服务器端呼叫

Meteor.methods({
getUserMeta: function () {
 var data = UserMeta.find({}).fetch();
 return data;
}

都在服务器端使用

 Meteor.call('getUserMeta',function (err, data) {
   if (!err) {
     Console.log(data);
   } else {
     console.log("error");
   }
});

在控制台中使用"集合"时.log它尚未准备就绪,并且没有任何数据。您可以使用控制台.log内部帮助程序,或者您应该像这样检查集合是否已准备就绪:

// Client-side
var subs = Meteor.subscribe('lastMsgRead', Meteor.userId());
Meteor.autorun(function() {
  if (subs.ready()) { ... }
});