Применяете геттеры по запросу "find" в Mongoose? - PullRequest
0 голосов
/ 19 марта 2012

Извините, если раньше об этом спрашивали (я искал, честно).

В принципе, у меня есть простая схема:

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;
  }
};

Сам метод получения работает, если я получаю определенный элемент из базы данных, но не когда я пытаюсь использовать Product.find() или другие запросы, метод получения не применяется, и я получаю «сырой» (необработанный) имущество. Я пытался использовать Product.find({}, [], {getters: true} безрезультатно. Я что-то упустил?

РЕДАКТИРОВАТЬ - используя версию mongod 1.8.5 и версию mongoose 2.5.10

Ответы [ 2 ]

1 голос
/ 01 февраля 2013

Сегодня столкнулся с той же проблемой - геттеры не применяются при использовании find ().Мой обходной путь должен был использовать виртуальный вместо этого и включить его в результаты 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 });
0 голосов
/ 19 марта 2012

Схема должна быть под определением получателя, если вы определяете схему после определения функции получателя, вы можете достичь ее.Должен работать согласно спецификации: http://mongoosejs.com/docs/getters-setters.html

...