如何在服务器上访问Meteor用户集合并正确调试

时间:2015-04-28 14:55:17

标签: javascript meteor meteor-accounts

在验证数据库插入的对象时,我想访问Meteor.users集合,让用户知道他是否将事件管理器添加到存储在数据库中的事件。我根据自己的需要扩展了探索流星书的例子。我知道Meteor Accounts API,但我现在停留在如何继续。

这是Meteor方法

Meteor.methods({
  eventInsert: function(eventAttributes) {
    check(Meteor.userId(), String);
    check(eventAttributes, {
      title: String,
      shareInPercent: Number,
      eventDate: Date
    });

    var errors = validateEvent(eventAttributes);

    if (errors.title || errors.shareInPercent || errors.eventDate)
      throw new Meteor.Error('invalid-event', "Check your inputs again.");

    var user = Meteor.user();

    var event = _.extend(eventAttributes, {
      userId: user._id,
      author: user.username,
      submitted: new Date()
    });

    var eventId = Events.insert(event);

    return {
      _id: eventId
    };
  }
});

validateEvent = function (event) {
  var errors = {};
  if (!event.title)
    errors.title = "Please fill in an event title";
  if (!event.eventDate)
    errors.eventDate =  "Please enter a date";

  var eventManagersNotExisting = areEventManagersExistingUsers(event.eventManagers);

  return errors;
}

areEventManagersExistingUsers = function (eventManagers) {
  var eventManagersNotExisting = [];
  _.each(eventManagers, function(eventManager){
    var eventManagerFound = Meteor.users.findOne({username: eventManager});
  });
  return eventManagersNotExisting;
}

当触发插入时,调用Meteor方法,在中间调用validateEvent方法,调用自身的辅助方法来检查用户集合,如下所示

var eventManagerFound = Meteor.users.findOne({username: eventManager});

如果我是对的并且因为它应该有意义,我不能在Meteor方法中放置console.log()消息,因为该方法是在服务器端执行的,并且消息不会出现在浏览器控制台中。

我的第一个问题是,有没有办法查看在服务器端完成的日志消息,类似于Node,这些消息只出现在shell中?

我读到了meteor debugmeteor shell命令,但我没有看到任何日志消息出现在我的代码中。

validateEventareEventManagersExistingUsers中的日志消息会出现在浏览器中。

现在我的第二个问题是,在validateEventareEventManagersExistingUsers中记录邮件时,为什么它们会显示在浏览器控制台中?

的结果
var eventManagerFound = Meteor.users.findOne({username: eventManager});

总是未定义的,只有当eventManager是我自己的用户时,它才会找到该条目。

但它是否适用于Meteor.method调用,我只看到正确执行的副作用,或者我在概念上做错了什么?

修改

正如下面的评论中所述,为了在执行Meteor方法时修复console.log(),我首先必须在Chrome控制台中activate preserve log,因为表单提交正在快速刷新网站,我只是没有看到该网站被重新加载并且日志已被删除。

但要求在浏览器控制台中查看日志,需要成功提交(即,我必须正确填写所有字段),因为我修复了支票

check(eventAttributes, {
  title: String,
  shareInPercent: Number,
  eventManagers: [String],
  eventDate: Date
});

但是Meteor.users.find();的日志只返回我的用户而不是数据库中的所有用户。知道如何在不发布用户集合的情况下获取所有这些内容吗?

0 个答案:

没有答案