0

我有一个带有来自 flexiage 的 mysql 插件的 node.js 服务器:这是我的代码:

connection.query('SELECT * FROM students WHERE email="'+req.body.username+'" AND password="'+req.body.password+'"',function(err,rows){


    if(rows.length)
    {

        var response=new Object;
        connection.query('SELECT * FROM forums WHERE id="'+rows[0].courseInterest+'"',function(err,course){

            response.subscription=course;
            response.username=rows[0].email;
            response.password=rows[0].password;
            response.loginFailed=false;
            response.loginAccepted=true;
        });

    }
    else
    {

        var response=new Object;
        response.username="";
        response.password="";
        response.loginFailed=true;
        response.loginAccepted=false;

    }
    console.log(response);
    res.setHeader('Content-Type', 'application/json');
    res.send(response);

});

在控制台中,我只是得到一个空白对象。它确实进入了 if 条件,但无法在构造内附加属性。我的猜测是变量范围,因为如果我在 connection.query 构造中执行 console.log,它会根据需要返回结果。请发光。

4

1 回答 1

2

不,没有作用域问题,因为作用域不是基于 JavaScript 的块,并且你的变量声明被提升了。

响应为空,因为该query函数是异步的,并且您在 mysql 回答之前记录并发送响应。

在回调中回答浏览器:

var response=new Object;
var sendResponse = function(){
    console.log(response);
    res.setHeader('Content-Type', 'application/json');
    res.send(response);
}
connection.query('SELECT * FROM students WHERE email="'+req.body.username+'" AND password="'+req.body.password+'"',function(err,rows){
    if (rows.length) {
        response=new Object();
        connection.query('SELECT * FROM forums WHERE id="'+rows[0].courseInterest+'"',function(err,course){
            response.subscription=course;
            response.username=rows[0].email;
            response.password=rows[0].password;
            response.loginFailed=false;
            response.loginAccepted=true;
            sendResponse();
        })
    } else {
        response=new Object;
        response.username="";
        response.password="";
        response.loginFailed=true;
        response.loginAccepted=false;
        sendResponse();
    }
});
于 2013-07-03T07:44:40.530 回答