2012-11-11 5 views
10

नहीं बोल सकता मैं mongoose quickstart के माध्यम से चल रहा हूँ और मेरे ऐप ट्यूटोरियल से त्रुटि TypeError: Object { name: 'fluffy', _id: 509f3377cff8cf6027000002 } has no method 'speak'बिल्ली का बच्चा

मेरे (थोड़ा संशोधित) कोड के साथ fluffy.speak() पर मर रहा रखता है:

"use strict"; 

var mongoose = require('mongoose') 
    , db = mongoose.createConnection('localhost', 'test'); 

db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    var kittySchema = new mongoose.Schema({ 
     name: String 
    }); 
    var Kitten = db.model('Kitten', kittySchema); 
    var silence = new Kitten({name: 'Silence'}); 
    console.log(silence.name); 
    kittySchema.methods.speak = function() { 
     var greeting = this.name ? "Meow name is" + this.name : "I don't have a name"; 
     console.log(greeting); 
    }; 

    var fluffy = new Kitten({name: 'fluffy'}); 

    fluffy.speak(); 

    fluffy.save(function(err) { 
     console.log('meow'); 
    }); 

    function logResult(err, result) { 
     console.log(result); 
    } 

    Kitten.find(logResult); 
    Kitten.find({name: /fluff/i }, logResult); 
}); 
+2

लॉल, शीर्षक सिर्फ "ऑफ टॉपिक" चिल्लाता है! : पी – Doorknob

+0

हाँ मैं कर सकता हूँ! मैं अभी बोल रहा हूँ! – bjb568

उत्तर

9

जब आप फोन db.model, मॉडल आपके स्कीमा से संकलित है। यह उस बिंदु पर है कि schema.methods मॉडल के प्रोटोटाइप में जोड़े गए हैं। तो आपको से पहले स्कीमा पर किसी भी तरीके को परिभाषित करने की आवश्यकता है, आप इसे मॉडल बनाते हैं।

// ensure this method is defined before... 
kittySchema.methods.speak = function() { 
    var greeting = this.name ? "Meow name is" + this.name : "I don't have a name"; 
    console.log(greeting); 
} 

// ... this line. 
var Kitten = db.model('Kitten', kittySchema); 

// methods added to the schema *afterwards* will not be added to the model's prototype 
kittySchema.methods.bark = function() { 
    console.log("Woof Woof"); 
}; 

(new Kitten()).bark(); // Error! Kittens don't bark.