我在visitInsert
中有lib/collections/visits.js
个功能来保存访问权限。
它还添加了登录用户的userId,但是当前访问保存得很好,但是当我查看mongo数据库时,它还没有保存userId
。这是visitInsert
函数:
Meteor.methods({
visitInsert: function(visitAttributes) {
check(Meteor.userId(), String);
check(visitAttributes, {
visit_date: String,
name: String
});
var properties = {
userId: this.userId
};
var visit = _.extend(visitAttributes, properties);
var visitId = Visits.insert(visit);
return {
_id: visitId
};
}
});
那么这里有什么问题?
更新:
在lib/collections/visits.js
中,我添加了一些console.log来查看值是什么:
console.log(visit);
console.log(visit.userId);
var visitId = Visits.insert(visit);
visit
和visit.userId
都填充了正确的值,因此使用当前登录用户的ID。但是当使用Visits.insert
保存到数据库时,访问会被保存,但没有userId
???
更新2:
在allow
中添加了visits.js
回调:
Visits.allow({
insert: function (userId, visit) { return !! userId; },
update: function(userId, visit) { return ownsDocument(userId, visit); },
remove: function(userId, visit) { return ownsDocument(userId, visit); }
});
解决方案:该问题与allow
回调无关,因为它是从方法调用的。我发现因为我使用aldeed:collection2
包,我需要明确检查所有属性。不仅是来自表单的那些,还有我在insert方法中添加的那些。
答案 0 :(得分:0)
var properties = {
userId: Meteor.userId()
}
你的允许功能似乎很奇怪。我会设置这样的东西:
// check if user is owner of object
ownsObject = function (userId, obj) {
return obj && obj.userId === userId;
};
Visits.allow({
insert: ownsObject,
update: ownsObject,
remove: ownsObject
});
此外,目前还不清楚你在使用什么。您使用的是您定义的方法“visitInsert”吗?如果是这样,如果您在客户端上调用Meteor.call('visitInsert',function(){}),则不需要定义任何allow。此外,如果您正在进行呼叫,则应将Meteor.userId()作为参数传递给您的方法,因为Meteor.userId()不存在于服务器端。
总而言之,我建议您使用Meteor.userId()构建“visitAttributes”客户端。只需调用服务器端方法,只检查属性和Visits.insert(visitAttributes)。
更好:创建一个要插入的对象“访问”并拨打电话:
客户方:
var visit = {
visit_date: getYourDate,
name: getYourName,
userId: Meteor.userId()
}
Meteor.call("visitInsert", visit, function(err, res){
if(!err){
Console.log("Visit inserted!");
}
});
服务器端:
Meteor.methods({
visitInsert: function(visit) {
check(visit.userId, String);
check(visit, {
visit_date: String,
name: String
});
return Visits.insert(visit);
}
});
干杯,
答案 1 :(得分:-1)
尝试使用
var properties = {
userId: Meteor.userId()
}