Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问服务器上的Meteor用户集合并正确调试_Javascript_Meteor_Meteor Accounts - Fatal编程技术网

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

Javascript 如何访问服务器上的Meteor用户集合并正确调试,javascript,meteor,meteor-accounts,Javascript,Meteor,Meteor Accounts,在验证数据库插入的对象时,我想访问Meteor.users集合,让用户知道他是否向存储在数据库中的事件添加了事件管理器。为了满足我的需要,我扩展了《发现流星》这本书的例子。我知道这件事,但我现在还不知道该怎么办 这是流星法 Meteor.methods({ eventInsert: function(eventAttributes) { check(Meteor.userId(), String); check(eventAttributes, { title:

在验证数据库插入的对象时,我想访问Meteor.users集合,让用户知道他是否向存储在数据库中的事件添加了事件管理器。为了满足我的需要,我扩展了《发现流星》这本书的例子。我知道这件事,但我现在还不知道该怎么办

这是流星法

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方法在两者之间被调用,它自己调用一个helper方法来检查users集合,如图所示

var eventManagerFound = Meteor.users.findOne({username: eventManager});
如果我是对的,并且因为它应该有意义,我不能将
console.log()
消息放在Meteor方法中,因为该方法是在服务器端执行的,并且消息不会出现在浏览器控制台中

因此,我的第一个问题是,是否有一种方法可以查看在服务器端完成的日志消息,类似于Node,这些消息只出现在shell中

我读过关于
meteor debug
meteor shell
命令的内容,但是我没有看到任何日志消息出现在那里,我将其放入了代码中

不过,
validateEvent
AreEventManagerExistingUsers
中的日志消息会出现在浏览器中

现在我的第二个问题是,当在
validateEvent
AreEventManagerExistingUsers
中记录消息时,为什么它们会显示在浏览器控制台中

以及

var eventManagerFound = Meteor.users.findOne({username: eventManager});
总是未定义的,只有当eventManager是我自己的用户时,它才查找该条目

但它是否适用于Meteor.method调用,而我只看到了正确执行的副作用,还是我在概念上犯了错误

编辑:

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

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

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

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

Any
console。服务器代码中的日志将显示在启动meteor的控制台中。是的,您完全可以使用该服务器端。好的,但是
console.log
后面的
eventInsert:function(eventAttributes){
,不会在浏览器中生成消息。你知道为什么吗?
eventInsert
是一种方法,即它在服务器上运行,而不是在浏览器上。所以当你说登录服务器代码显示在控制台中时,你指的是哪个控制台?我至少在终端上看不到它们。你在运行哪个操作系统?在linux和osx中,你会看到任何
console.log
在启动meteor的终端的服务器端输出。