2015-07-19 96 views
0

现在我已经玩过nodeJS和SocketIO,并且一切正常。 但现在我陷入了一个查询!Mongoose NodeJS只有未定义的值

// 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“用户数据”是空的,上面的console.log告诉我:“用户:testuser的已知用户名:未定义”。 我无法通过这种方式从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 
      } 
     } 
    }); 

}); 

在这里,输出由手动查询上蒙戈壳:

db.user.find({名称: 'TESTUSER',密码: '测试'}){ “_id”:的ObjectId( “55a8cc8240fdc97f108d4d11”), “用户id”: “1”, “名”: “testuser的”, “电子邮件”: “[email protected]”, “密码”: “测试”}

这是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'); 
+0

您是否尝试过搜索所有用户?你确定你已经连接到你的node.js代码中正确的数据库吗? – veggiesaurus

+0

是的,我做过。一切都很好,其他查询运行没有任何问题。 – km65

+1

@JohnnyHK: 你是我的英雄!非常感谢! – km65

回答

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);不有道理。找不到任何人与获取错误不同。您需要将该部分作为嵌套在else块中的单独的if语句来处理。

+0

感谢您的回复。我试过这种方式,结果为NULL ... userObj不显示任何内容,但为NULL。 – km65

+0

您的猫鼬语法正确,不包括'.find()'。编辑:我误读它,它应该是'.where(“password”)。equals(userObj.pword)' – cdbajorin

+0

@ km65我会更新我的答案 – cdbajorin