Mongoose:调用另一个模式的静态方法返回“TypeError:对象没有方法'xxx'”

时间:2013-08-21 01:46:39

标签: node.js mongodb mongoose

在我的节点项目中,我定义了一个狗模式和一个猫模式。

架构是相同的(名称/年龄)。

两个架构都有一个静态方法 sayHello 。 cat schame有一个实例方法let_dog_speak,它将触发Dog模式的 sayHello ,let_cat_speak也是如此。

在我的路由处理程序中,当我尝试获取狗实例(/ getdog /:name)时,将触发cat的 sayHello 方法,反之亦然。

问题是我的猫能够让狗说话而狗不能。我附在我的代码和错误消息下面。

./模型/ 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;

./模型/ 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)

0 个答案:

没有答案