Meteor的简单模式,方法不返回数字

时间:2016-01-11 16:21:41

标签: javascript mongodb meteor

我已经看到很多与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中的消息也没有显示。

2 个答案:

答案 0 :(得分:1)

_id设置optional: trueautoValue将为其提供实际值,但必需检查在到达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;
                }
            });