在验证数据库插入的对象时,我想访问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 debug
和meteor shell
命令,但我没有看到任何日志消息出现在我的代码中。
validateEvent
和areEventManagersExistingUsers
中的日志消息会出现在浏览器中。
现在我的第二个问题是,在validateEvent
和areEventManagersExistingUsers
中记录邮件时,为什么它们会显示在浏览器控制台中?
的结果
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();
的日志只返回我的用户而不是数据库中的所有用户。知道如何在不发布用户集合的情况下获取所有这些内容吗?