2013-08-31 71 views
0

這個函數check_auth返回總是undefined? cookie是好的結果是好的,也許問題是異步調用,如果是的話,如何解決它? 如果函數不滿意node function result undefined

function check_auth(req,res){ 
var cookie=check_cookie(req); 
var check_result_ret; 
    if(cookie){ 
     console.log("exist cookie: "+cookie); 
     var sql = 'SELECT session_id,username,id FROM session WHERE session_id = ' + connection.escape(cookie); 
     connection.query(sql, function(err, results) { 
      if (err) throw err; 
if (results.length > 0 && results[0]['session_id'] ==cookie) { 
users[results[0]['session_id']]={username:results[0]["username"],id:results[0]["id"]}; 
check_result_ret=1; 
}else{ 
      check_result_ret=0; 
      } 
        }); 

}else{ 
     check_result_ret=0; 
    } 
return check_result_ret; 
} 

服務器節點的一部分,我不慣於連接

switch (path) { 
case '/': 
var test=check_auth(request,response); 
console.log("result",test); 
if(test==1){  
fs.readFile("main.html", 'utf-8', function (error, data) { 
//make somthing 
}); 
}else{ 
    send404(response); 
} 
break; etc.... 

回答

1

的問題是回調的connection.queryfunction(err, results)調用之前check_auth回報check_result_ret

我猜你需要閱讀更多關於如何異步編程的工作。這可能會幫助http://www.sebastianseilund.com/nodejs-async-in-practice

也許這會有所幫助,

check_auth(req,res){ 
...do stuff 
    connection.query(sql, function(err, results) { 
    if (err) throw err; 
    if (results.length > 0 && results[0]['session_id'] ==cookie) { 
     users[results[0]['session_id']]={username:results[0]["username"],id:results[0["id"]}; 
     check_result_ret=1; 
    } 
    else{ 
     check_result_ret=0; 
    } 
    var test = check_result_ret; 
    if(test==1){  
    fs.readFile("main.html", 'utf-8', function (error, data) { 
      //make somthing afer reading the file 
      anotherAsyncCall(input,options,function(output){ 
       //do something with output 
      }); 
    }); 
    } 
    else{ 
    send404(response); 
    } 
}) 
+0

感謝非常有用 –

相關問題