我在lib/collections/visits.js中有一个visitInsert函数来保存一次访问。它还添加了登录用户的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:
在visits.js中增加了allow回调
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方法中添加的元素。
发布于 2014-12-09 18:55:45
就像基思·尼古拉斯说的,使用:
var properties = {
userId: Meteor.userId()
}你的allow函数看起来很奇怪。我会这样设置:
// 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(){}),你应该不需要定义任何允许。此外,如果您正在进行调用,您应该将Meteor.userId()作为参数传递给您的方法,因为Meteor.userId()并不存在于服务器端。
总之,我建议您使用Meteor.userId()来构建"visitAttributes“客户端。只需调用仅检查属性和Visits.insert(visitAttributes)的服务器端方法即可。
更好的做法是:创建一个想要插入的对象“and”,然后进行调用:
客户端:
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);
}
});干杯,
发布于 2014-12-01 17:47:40
尝试使用
var properties = {
userId: Meteor.userId()
}https://stackoverflow.com/questions/27224678
复制相似问题