我正在定义一个用户对象。如果用户已登录,则其ID大于零。然后 条件调用node-mysql查询并将结果分配给对象属性。我已经将node-mysql查询回调中的上下文绑定(绑定?)到构造函数的“this”(我认为)。我的问题是当用户没有登录并且ID为零时。背景不同。我知道这是因为我将属性赋值从条件的“else”部分复制到“if”部分并且它有效。但我不想离开,因为它总是会查询。
var Q = require("q");
var mysql = require('mysql');
function User(id, type) {
var deferred = Q.defer();
// If the user is logged in
if (id > 0) {
connection.query(query, function(err, results) {
if(err) {
deferred.reject(new Error(err))
} else {
var result = results[0];
this.id = result.id;
this.type = result.type;
this.nickname = result.nickname;
deferred.resolve(this);
}
}.bind(this));
} else {
this.id = 0;
this.type = 1;
this.nickname = "guest";
deferred.resolve(this);
}
return deferred.promise;
}
例如,对象在此处实例化。问题是当用户是 未登录(并且ID为零)实例化对象为空,否则为空 包含属性。
var renderIndex = function(req, res) {
var localId = req.session.passport.user ? req.session.passport.user : 0,
options = {};
var user = new User(localId, 1);
return Q.all([
findGames(),
user
])
.then (function(allArray) {
var gamesObj = allArray[0],
userObj = allArray[1];
options.title = 'Title';
options.games = gamesObj;
options.user = userObj;
// Render the index jade template
res.render('index', options);
})
.done();
};