Mongoose NodeJS只有未定义的值

时间:2015-07-19 18:33:40

标签: javascript node.js mongodb mongoose socket.io

现在我玩了nodeJS和SocketIO,一切都很顺利。 但是现在我遇到了一个问题!

// User Auth Event
socket.on('userAuth', function(userObj) {

     var queryUserAuth = User.find({
         name : userObj.name
     })
     .where('password',userObj.pword);
     queryUserAuth.exec(function(err, userData){

        if(err) {
            socket.emit('userAuthOK',err);
            console.log('!! User: %s or PW not OK', userObj.name);
            return handleError(err);
        }else {
            console.log('User: %s known, userID: %s', userObj.name, userData.userid);
            socket.emit('userAuthOK', userData.userid);
            socket.join(userData.userid); // Create new room / join this room
        }
     });

});

但是所有的时间var" userData"是空的,上面的console.log告诉我"用户:testuser known,userID:undefined"。 我无法通过这种方式从MongoDB获取此用户对象,但如果我使用mongo控制台,我可以找到该用户。

/////////// 编辑: 经过一些更改......这里是新代码......但仍未找到正确的记录并获得null结果。

// User Auth Event
socket.on('userAuth', function(userObj) {
     var queryUserAuth = User.findOne({
         name : userObj.name,
         password : userObj.pword
     });
         //.where("password").equals(userObj.pword);
    queryUserAuth.exec(function(err, userData){

        if(err) {
            socket.emit('userAuthOK',err);
            console.log('!! User Auth Error: %s', err);
            return handleError(err);
        }else {
            if(!userData){
                console.log('!! User: %s or PW not OK.', userObj.name);
                socket.emit('userAuthOK','fail');
            }else {
                console.log('User: %s known, userID: %s', userObj.name, userData);
                socket.emit('userAuthOK', userData);
                socket.join(userData.userid); // Create new room / join this room
            }
        }
     });

});

这里通过mongo shell手动查询输出:

  

db.user.find({name:' testuser',password:' test'}){" _id" :ObjectId(" 55a8cc8240fdc97f108d4d11")," userid" :" 1"," name" :" testuser"," email" :" test@test.com","密码" :"测试" }

这就是userObj的价值:{name:' testuser',pword:' test' }

///// EDIT2:

这里的user.js包括用户的猫鼬模型:

// Load the MongoDB module
var mongoose = require('mongoose');
// user schema
var userSchema = mongoose.Schema({
    userid: Number,
    name: String,
    email: String,
    password: String,
    status: Number
});


// compiling the user schema
var User = mongoose.model('User', userSchema);

// make this available to our users in our Node applications
module.exports = User;

这里包含了模型:

// Load Mongoose models
var User = require('./models/user');

1 个答案:

答案 0 :(得分:0)

尝试记录userData而非userData.userid。它是一个数组,而不是一个对象。您想使用.findOne(),而不是.find()

此外,查询方法的语法是:

.where("password").equals(userObj.pword)

或者,您可以将其添加到原始.findOne()

var queryUserAuth = User.findOne({
    name: userObj.name,
    password: userObj.pword
    });

此外,您的console.log('!! User: %s or PW not OK', userObj.name);没有任何意义。找不到任何人与获得错误不同。您希望将该部分作为嵌套在if块中的单独else语句来处理。