我已经看到很多与Meteor方法无关的问题,但没有一个解决方案适合我。我正在尝试在我的集合中实现并自动增加_id
字段。
以下是我的文件:
server/methods.js
Meteor.methods({
getNextSequence: function(counter_name) {
if (Counters.findOne({ _id: counter_name }) == 0) {
Counters.insert({
_id: counter_name,
seq: 0
});
console.log("Initialized counter: " + counter_name + " with a sequence value of 0.");
return 0;
}
Counters.update({
_id: counter_name
}, {
$inc: {
seq: 1
}
});
var ret = Counters.findOne({ _id: counter_name });
console.log(ret);
return ret.seq;
}
});
和
lib/collections/simple-schemas.js
Schemas = {};
Schemas.Guests = new SimpleSchema({
_id: {
type: Number,
label: "ID",
min: 0,
autoValue: function() {
if (this.isInsert && Meteor.isClient) {
Meteor.call("getNextSequence", "guest_id", function(error, result) {
if (error) {
console.log("getNextSequence Error: " + error);
} else {
console.log(result);
return result;
}
});
}
// ELSE omitted intentionally
}
}
});
Guests.attachSchema(Schemas.Guests);
我收到的错误是我假设来自Simple-Schema并且它正在说Error: ID must be a Number
,但是我的代码返回了一个数字而不是它?此外,我的console.log
消息没有显示,Meteor.methods中的消息也没有显示。
答案 0 :(得分:1)
为_id
设置optional: true
。 autoValue
将为其提供实际值,但必需检查在到达autoValue
之前失败。
答案 1 :(得分:0)
您在Meteor.call中传递的参数不是数字,而是字符串"guest_id"
。您应该传递this.value
,因为它引用了传递给密钥_id
的值。
您的Meteor.call功能需要以下内容:
Meteor.call("getNextSequence", this.value, function(error, result) {
if (error) {
console.log("getNextSequence Error: " + error);
} else {
console.log(result);
return result;
}
});