Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误';对象没有方法xxx';使用猫鼬时_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 错误';对象没有方法xxx';使用猫鼬时

Javascript 错误';对象没有方法xxx';使用猫鼬时,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试使用Mongoose连接MongoDB和NodeJ 我的代码如下。当我试图通过api/用户执行GET/POST时,我得到 错误 有人能解释一下我做错了什么吗?我不得不将代码拆分成不同的文件,因为我有很多函数,我不想把它们弄乱我的app.js或index/routes.js app.js //database connection mongoose.connect('....'); var db = mongoose.connection; db.on('error', conso

我正在尝试使用Mongoose连接MongoDB和NodeJ

我的代码如下。当我试图通过api/用户执行GET/POST时,我得到

错误



有人能解释一下我做错了什么吗?我不得不将代码拆分成不同的文件,因为我有很多函数,我不想把它们弄乱我的app.js或index/routes.js

app.js

//database connection 
mongoose.connect('....');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
 console.log("Conncection Success !");
});

users_module= require('./custom_modules/users.js');

users_module.init_users();
...
    app.get('/api/users',user.list);  // routing code from expressjs 
/custom_modules/users.js

function init_users() {

    userSchema = mongoose.Schema({
        //id: Number,
        usernamename: String,
        hash: String,
        ...

    });

    userSchema.methods.list = list;

    UserModel = mongoose.model('User', userSchema);

}

function list() {
    return UserModel.find(function (err, users) {
        if (!err) {
            return users;
        } else {
            return console.log(err);

        }
    });
});

exports.init_users = init_users;
exports.list = function (req, res){

    var users = UserModel.list();  // <---------- This is the error Line 
    return res.send(users);

}
路由/user.js

function init_users() {

    userSchema = mongoose.Schema({
        //id: Number,
        usernamename: String,
        hash: String,
        ...

    });

    userSchema.methods.list = list;

    UserModel = mongoose.model('User', userSchema);

}

function list() {
    return UserModel.find(function (err, users) {
        if (!err) {
            return users;
        } else {
            return console.log(err);

        }
    });
});

exports.init_users = init_users;
exports.list = function (req, res){

    var users = UserModel.list();  // <---------- This is the error Line 
    return res.send(users);

}
exports.list=函数(请求、恢复){

var users=UserModel.list();//Mongoose中
模型
对象的
方法
属性用于将函数添加到模型对象的实例中。因此,在代码中,函数
列表
被添加到
用户模型
的实例中。如果您希望使用类似于单例函数的
静态
,则可以直接添加它调用
mongoose.model('UserModel',userModelSchema);
返回到
UserModel
对象:

现在,您可以调用它来返回所有用户的列表

请注意,它仍然是一个异步函数。因此,您不能只返回调用该函数的结果,因为它通常为空。
find
是异步的,因此您的
list
函数还需要接受在返回列表时可以调用的回调:

UserModel.list(function(list) {
   res.render(list);
});

你在哪一行看到了错误?我更新了问题的错误。还指出了错误发生的那一行。错误发生在routes/user中。js
UserModel
没有
list
方法。你使用
方法将它添加到
UserModel
的实例中。
你可以做
UserModel.list=list
添加它。如果我使用userSchema.list=list,也会有帮助吗?嗨@WiredPairie,请将其作为答案,我会接受。你是对的。它起了作用。你的最后一段让我更清楚了。谢谢!我现在明白了。静态方法也可以通过使用关键字statics-animalSchema来定义.statics.findByName=函数(名称,cb){}