小猫不会说话
我正在运行mongoose快速启动和我的应用程序不断死于fluffy.speak()
与错误TypeError: Object { name: 'fluffy', _id: 509f3377cff8cf6027000002 } has no method '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); });
当你调用db.model
,模型是从你的模式编译的。 正是在这一点上, schema.methods
被添加到模型的原型。 因此, 在您创build模型之前,您需要在模式上定义任何方法。
// 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.