2012-03-19 2 views
0

Désolé si cela a déjà été demandé (j'ai cherché, honnêtement).Application de getters sur une requête "find" dans Mongoose?

Fondamentalement, j'ai un schéma simple:

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

Le getter lui-même fonctionne, si je récupère un élément spécifique de la base de données, mais pas lorsque je tente d'utiliser Product.find() ou d'autres requêtes, le getter ne s'applique pas et j'obtiens la propriété "brute" (non traitée). J'ai essayé d'utiliser Product.find({}, [], {getters: true} en vain. Est-ce que je manque quelque chose?

EDIT - en utilisant la version mongod 1.8.5 et 2.5.10 mangouste

Répondre

0

Le schéma devrait être sous la définition de getter, si vous définissez le schéma après la définition de fonction de lecture, vous pouvez l'atteindre. Il devrait fonctionner selon la spécification: http://mongoosejs.com/docs/getters-setters.html

+0

Dans mon code, la fonction est définie au-dessus du schéma, mais toujours aucun dé. J'ai temporairement résolu mes problèmes avec un docs.map qui appelle doc.toObject ({getters: true}), mais ça me dérange toujours. – Cronco

1

Ran dans ce même problème aujourd'hui - les getters ne sont pas appliqués en utilisant un find(). Ma solution de contournement était d'utiliser un virtuel à la place et de l'inclure dans les résultats 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 }); 
Questions connexes