很抱歉,如果之前已经问过这个问题(我老实说,我已经搜索过了。)
基本上,我有一个简单的架构:
var ProductSchema = new Schema({
name: {type: String},
image: {type: String, get: getImageUrl},
stock: {type: Number},
price: {type: Number},
description: String
});
其中
var getImageUrl = function(imgUrl) {
if (imgUrl.indexOf('http://') !== 0) {
return 'http://' + os.hostname() + (app.port ? app.port : '') + '/public/' + imgUrl;
} else {
return imgUrl;
}
};
如果我从数据库中检索特定项目,那么getter本身是可行的,但是当我尝试使用Product.find()
或其他查询时,getter没有得到应用,我得到了“raw”(未经处理的财产。我尝试使用Product.find({}, [], {getters: true}
无济于事。我错过了什么吗?
编辑 - 使用mongod版本1.8.5和mongoose 2.5.10
答案 0 :(得分:1)
今天遇到同样的问题 - 使用find()时没有应用getter。我的解决方法是使用虚拟代码并将其包含在json结果中。
schema.virtual("APP_ID_URL").get(function() {
if (this.APP_ID > 0){
return "<a href='#'>" + this.APP_ID + "</a>";
}
else{
return "";
}
});
schema.set('toJSON', { virtuals: true });
答案 1 :(得分:0)
模式应该在getter的定义下,如果你在getter函数定义之后定义模式,你就可以到达它。它应该按照规范工作:http://mongoosejs.com/docs/getters-setters.html