Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么我的Mongoose 3.8.7模式获取者和设置者被忽略了?_Node.js_Mongoose_Schema_Setter_Getter - Fatal编程技术网

Node.js 为什么我的Mongoose 3.8.7模式获取者和设置者被忽略了?

Node.js 为什么我的Mongoose 3.8.7模式获取者和设置者被忽略了?,node.js,mongoose,schema,setter,getter,Node.js,Mongoose,Schema,Setter,Getter,在使用Node.js、Mongoose和MongoDB时,我发现我的Mongoose模式getter和setter在执行findOne查询时不会启动 我发现了一个旧的线程,它表明2.x版中的getter和setter存在问题,但它表示问题已经解决,我正在使用最新版本的Mongoose(3.8.7) 这是我模式的一部分 function testGetter(value) { return value + " test"; } /** * Schema */ var schem

在使用Node.js、Mongoose和MongoDB时,我发现我的Mongoose模式getter和setter在执行findOne查询时不会启动

我发现了一个旧的线程,它表明2.x版中的getter和setter存在问题,但它表示问题已经解决,我正在使用最新版本的Mongoose(3.8.7)

这是我模式的一部分

function testGetter(value) {
        return value + " test";
}

/**
* Schema
*/

var schema = new Schema({
        username: { type: String, required: true, unique: true, get: testGetter }
});

// I have also tried this.

schema.path('username').get(function (value, schemaType) {
        return value + " test";
});
以下是我执行查询的方式

Model
.findOne(conditions, fields, options)
.populate(population)
.exec(function (error, doc) {
        callback(doc, error);
});
它使用缺少“测试”后期修复的用户名值进行响应。我做错什么了吗?任何帮助都将不胜感激

其他信息

这是“查找一个”的结果:

{
    "username": "Radius"
}
这是通过上述两种方法之一应用schema.path.username.getters后的值:

[ [Function: testGetter] ]
试一试

作为getter函数,
这个
是您的实体实例,
参数在这里意义不大


如果您正在编写setter函数,则必须编写
this.username=value

您是否假设虚拟机不工作,因为它们不会显示在控制台中。日志输出?如果是这样的话,那是故意的。虚拟对象是实际文档的外部对象,因此默认情况下不会使用console.log打印。要让它们显示出来,请阅读以下文档:

在使用Mongoose进行查询时,getter没有修改返回的文档,这与我遇到的问题相同。要使其适用于每个查询,可以执行以下操作:

// Enable Mongoose getter functions
schema.set('toObject', { getters: true });
schema.set('toJSON', { getters: true });

主要的问题是我拥有的getter被完全忽略了。并不是返回值最终为空。我已尝试将您的建议应用于我的代码,但getter仍然未使用。谢谢你的回答!我将对我原来的问题做一些澄清。哦,你也可以尝试使用“virtual”而不是path。我已经尝试使用virtual来覆盖用户名path
schema.virtual('username').get(function(){…})
甚至尝试创建一个单独的虚拟
schema.virtual('test')
,返回值为“test”,以查看虚拟是否对我有效,但没有效果。我没有查看控制台日志条目,只是将文档作为响应发送回。在阅读了您给我的文档片段之后,我将
doc
更改为
doc.toObject({getters:true,setters:true,virtuals:true})
,它现在可以工作了。谢谢!这对我有用。谢谢然而,你能解释一下为什么我们需要提到以上这些吗?设置器似乎在不启用Mongoose设置器功能的情况下工作。
// Enable Mongoose getter functions
schema.set('toObject', { getters: true });
schema.set('toJSON', { getters: true });