我正在使用带有socket.io和node-mysql的Node.js. 我有一个用户类来登录和操纵用户。 在构造函数中,我对db。
进行查询function user(u,pass,connection,callback){
connection.query("SELECT * FROM `users` WHERE `username`=? && `password`= ? LIMIT 1",[u,pass], function(err,result)
if(err){
console.log(err);
this.id = false;
}
else {
if(result.length > 0){
var row = result[0];
this.socket = null;
this.id = row.id;
this.inuse = null;
}
else
this.id=false;
}
callback(this);
});
}
我必须创建一个回调函数,因为对db的查询是异步的。但是,当我使用这个关键词时,我将属性附加到连接实例,而不是我创建的新对象。 另外,当我将this关键字传递给回调时,传递'连接'而不是'用户',所以我没有我的对象。 有人知道这个问题的解决方案吗?
我像这样使用它
user_fac(username,password,connection, function(u){
console.log(u);
if(u.id){
clients[u.id] = u;
}
else {
//throw error
}
});
答案 0 :(得分:0)
我猜你所指的对象是user()
函数,你可以将this
从另一个范围存储到变量中,然后添加到该变量中。
function user(u,pass,connection,callback){
var self = this;
connection.query("SELECT * FROM `users` WHERE `username`=? && `password`= ? LIMIT 1",[u,pass], function(err,result)
if(err){
console.log(err);
self.id = false;
} else {
if(result.length > 0){
var row = result[0];
self.socket = null;
self.id = row.id;
self.inuse = null;
} else {
self.id=false;
}
}
callback(self);
});
}
答案 1 :(得分:0)
手头存放。
function user(u,pass,connection,callback){
var that = this /// <---- stash it in the closure
connection.query("SELECT * FROM `users` WHERE `username`=? && `password`= ? LIMIT 1",[u,pass], function(err,result) {
if(err){
console.log(err);
that.id = false; // <----- use that instead of this
} else {
if(result.length > 0){
var row = result[0];
that.socket = null;
that.id = row.id;
that.inuse = null;
}
else {
that.id=false;
}
callback(that);
});
}