私のノード プロジェクトでは、dog スキーマと cat スキーマを定義しました。
スキーマは同じです(名前/年齢)。
どちらのスキーマにも静的メソッドsayHelloがあります。catスキーマには、Dog スキーマのsayHelloをトリガーするインスタンス メソッド let_dog_speak があり、let_cat_speak も同様です。
私のルート ハンドラーで、犬のインスタンス (/getdog/:name) を取得しようとすると、猫のsayHelloメソッドがトリガーされます。逆の場合も同様です。
問題は、私の猫は犬に話させることができるのに、犬には話させられないことです。コードとエラーメッセージの下に添付しました。
./model/cat.js
var Dog = require('./dog');
var Cat = new Schema({
name: { type:String, required:true, trim:true },
age: { type:Number, required:true, trim:true }
});
Cat.statics.sayHello = function() {
console.log("Meow meow");
};
Cat.methods.let_dog_speak = function() {
Dog.sayHello();
};
var cat_model = testdb.model('cat_collection', Cat);
module.exports = cat_model;
./model/dog.js
var Cat = require('./cat');
var Dog = new Schema({
name: { type: String, required: true, trim: true },
age: { type: Number, required:true, trim:true },
});
Dog.statics.sayHello = function() {
console.log("Wow wow");
};
Dog.methods.let_cat_speak = function() {
Cat.sayHello();
};
var dog_model = testdb.model('dog_collection', Dog);
module.exports = dog_model;
これが私のルートです./route.js
app.get('/getdog/:name', function(req, res) {
Dog.findOne({
name: req.params.name
}, function(error, dog) {
dog.let_cat_speak(); //This throws error
res.json(dog);
});
});
app.get('/getcat/:name', function(req, res) {
Cat.findOne({
name: req.params.name,
}, function(error, cat) {
cat.let_dog_speak(); //This works, will print wow wow
res.json(cat);
});
});
エラーメッセージ:
TypeError: Object #<Object> has no method 'sayHello'
at model.Dog.methods.let_cat_speak (/home/sliter/Development/nodeJS/mongotest/backend/model/dog.js:16:9)