猫鼬模式getter递归

时间:2018-11-30 02:26:57

标签: node.js mongodb mongoose

我无法理解如何将getter与我用于API的猫鼬模式结合使用。我正在将ipaddr.js模块用于ipaddr方法。

我在架构中定义了此字段:

("ptr", POINTER(c_ubyte))

我将getters设置为true,以便可以看到控制台中发生的事情,最终我只希望JSON结果中返回ipv4_address。

ipv4_address: {
    type: Buffer,
    required: false,
    get: function () {
        //For debugging, actually want it returned
        console.log(this.ipv4_address.toString());
        },
        set: function (v) {
            return ipaddr.parse(v).toByteArray();
        },
        select: false,
        index: true
    }

我了解这一行:

ClientSchema.set('toObject', {
    getters: true
});
ClientSchema.set('toJSON', {
    getters: true
});

导致以递归方式调用setter,从而导致RangeError:超出了最大调用堆栈大小。我完全理解其原因。如果我正在从_ipv4_address读取,则不会发生,但是架构定义了变量名称。

这是REST API的一部分,我希望POST将ipv4_address写入该字段名称。我希望获取结果时字段名称相同。

我对如何解决这个问题感到非常困惑。

1 个答案:

答案 0 :(得分:0)

getter函数将当前字段值传递给您,因此您无需将其从this中拉出,就可以避免递归:

get: function (me) {
    //For debugging, actually want it returned
    console.log(me.toString());
},