Find()函数retunrs undefined - Mongoose和Node.js

时间:2015-06-29 15:18:31

标签: javascript node.js mongodb mongoose find

我试图用Node.js和Mongoose做一个简单的函数,如果模型为空则返回true。

猫鼬配置很好:

var mongoose = require('mongoose');
var db = mongoose.createConnection( 'mongodb://localhost:27017/prueba' );

var userSchema = mongoose.Schema({
    phoneNumber: Number,
    name: String
});
var User = db.model('User', userSchema, 'User'');

然后我试着这样做:

User.find(function(err, data) {
    if (err) {console.log(err)};
    console.log(data.length == 0 );
});

它工作正常,记录为真或假。

然后我试着这样做:

var isUsersEmpty =  function () {
    User.find(function(err, data) {
        if (err) {console.log(err)};
        console.log(data.length == 0);
    });
}
isUsersEmpty();

再次它工作正常,它记录真或假,如果我这样做买:

var isUsersEmpty2 = function () {
    User.find(function(err, data) {
        if (err) {console.log(err)};
        return data.length == 1;
    });
}
console.log(isUsersEmpty2());

然后日志打印“未定义”。 如果我需要一个返回true或false的函数来做这样的事情,我该怎么办:

if (isUsersEmpty2()) {} //Do something here... 

isUsersEmpty2()返回始终未定义。

1 个答案:

答案 0 :(得分:1)

isUsersEmpty2()返回一个承诺,这意味着你不能像你一样记录它。您需要从该函数发送响应。这应该有效:

var isUsersEmpty2 = function (res) {
User.find(function(err, data) {
    if (err) res(err, null);
    res(null, data.length == 1);
});
}

isUsersEmpty2(function(err, res) {
   if(res) {/*do something*/}
});