Node.js 套接字io,mongoose函数返回未定义的

Node.js 套接字io,mongoose函数返回未定义的,node.js,mongoose,socket.io,Node.js,Mongoose,Socket.io,我想创建一个函数来获取用户信息。当我从函数返回数据时,它返回未定义的。当Iconsole.log位于函数内部时,它将返回所有用户数据。怎么了 代码: 函数用户(){ var uid=socket.request.headers.cookie.uid; var pwd=socket.request.headers.cookie.pass; 如果(uid!=未定义和&pwd!=未定义){ models.user.findOne({ “\u id”:uid, “密码”:pwd },函数(错误,用户){

我想创建一个函数来获取用户信息。当我从函数返回数据时,它返回未定义的
。当I
console.log
位于函数内部时,它将返回所有用户数据。怎么了

代码:

函数用户(){
var uid=socket.request.headers.cookie.uid;
var pwd=socket.request.headers.cookie.pass;
如果(uid!=未定义和&pwd!=未定义){
models.user.findOne({
“\u id”:uid,
“密码”:pwd
},函数(错误,用户){
console.log(用户);
退货(用户)?用户:假;
});
}否则{
返回false;
}
}
log(user());

您需要回调,这是初学者的基本问题

function user(callback) { // receives a callback
    var uid = socket.request.headers.cookie.uid;
    var pwd = socket.request.headers.cookie.pass;
    if (uid != undefined && pwd != undefined) {
        models.user.findOne({
            '_id': uid,
            'password': pwd
        }, callback); // pass callback to mongoose
    } else {
        return callback(new Error("No uid")); // pass callback when no uid
    }
}

user(function(err, userData) { // now you invoke fn to user function
                               // err is err from database or from new Error("No uid")
                               // userData is database User
    if (err) 
        return console.log(err);
    console.log(userData);
    // userData should be used here
    // for example. send this User by socket
    // socket.emit('databaseUser', userData);
});