在Mongoose的“查找”查询中应用getter?

时间:2012-03-19 09:12:30

标签: javascript node.js mongoose getter

很抱歉,如果之前已经问过这个问题(我老实说,我已经搜索过了。)

基本上,我有一个简单的架构:

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

2 个答案:

答案 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