绑定node-mysql回调中的上下文

时间:2013-12-21 03:22:57

标签: node.js node-mysql

我正在定义一个用户对象。如果用户已登录,则其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();
};

0 个答案:

没有答案